如何在运行时将值从窗口传递到用户控件?
Posted
技术标签:
【中文标题】如何在运行时将值从窗口传递到用户控件?【英文标题】:How to passing value from window to usercontrol at runtime? 【发布时间】:2017-11-16 01:23:17 【问题描述】:这是我应该获取数据的用户控制代码:
这是我的主窗口,我在其中包含了用户控件并将值设置为属性:
这不起作用,因为该值始终为空。请帮助纠正我做错的任何事情。谢谢。
【问题讨论】:
从下一次开始发布实际代码而不是图像。 【参考方案1】:UserControl
是在设置 GetMyValue
属性之前创建的。在创建实例之前,您不能设置实例的属性...
等到UserControl
被加载,你会得到预期的值:
public UserControl1()
InitializeComponent();
Loaded += (s, e) =>
string finalValue = GetMyValue;
;
【讨论】:
谢谢.. 这就像一个魅力。虽然我很想知道使用这种方式更好还是@Marsh 显示的方式更好。使用这个或另一个有什么好处? 您无需将属性定义为依赖属性就可以获取它的值...【参考方案2】:据我所知,您似乎需要使用依赖属性。这将替换您拥有的 GetMyValue 属性。
查看此示例以了解自定义依赖属性。
https://www.tutorialspoint.com/wpf/wpf_dependency_properties.htm
旁注:一种快速的制作方法是键入“propdp”,然后按两次制表符。然后按自己的方式进行设置。
【讨论】:
感谢您的链接,附注非常有帮助。我按照给定的代码进行操作,但是 OnSetTextChanged 是必要的吗?如何在没有 OnSetTextChanged 的情况下编辑代码。 除非您有需要更新的绑定,否则没有必要。要没有它,只需删除 ", new PropertyChangedCallback(OnSetTextChanged)。然后你就会有新的 " new PropertyMetaData("") 当我更改为new Property MetaData("")
时,我得到的结果总是空的。【参考方案3】:
1.确保您已将范围设置为“用户”而不是“管理员”,否则您将无权访问资源。 2.修改数据后确保有保存方法。
写作 使用 Properties.Settings;
Settings.Default.myProperty = myValue;
Settings.Default.Save();
阅读
String myValue = Settings.Default["myProperty"].ToString();
您还可以通过以下方式管理您的资产 解决方案探索 > 你的项目 > 属性 > Settings.settings
【讨论】:
【参考方案4】:一个很好的解决方案:
private void Window_Loaded(object sender, RoutedEventArgs e)
var control = new UserControl1();
control.GetMyValue = "HelloWorld";
grid1.Childern.Add(control);
还有其他解决方案,例如Binding DataContext 或自定义DependencyProperty
【讨论】:
【参考方案5】:您需要创建依赖属性。没有什么难做的:
首先你需要注册:
public static readonly DependencyProperty GetMyValueProperty =
DependencyProperty.Register("GetMyValue", typeof(string),
typeof(UserControl1), new UIPropertyMetadata(string.Empty));
然后创建自动属性:
public string GetMyValue
get return (string )GetValue(GetMyValueProperty );
set SetValue(GetMyValueProperty , value);
就是这样,只需将此示例复制到您的 UserControl1 类中即可。
【讨论】:
'UIPropertyMetadata(string.Empty));
这行代码给我错误,我只能使用 PropertyMetadata...问题是每当我使用PropertyMetadata(string.Empty);
时,我得到的结果总是空的。以上是关于如何在运行时将值从窗口传递到用户控件?的主要内容,如果未能解决你的问题,请参考以下文章