[英]WPF - Binding in XAML to an object created in the code behind
可以在代码中创建的对象(即C#)用于XAML中的绑定吗?
例如:
public class MyForm
{
private MyComplexObject complexObject;
public MyForm()
{
InitializeComponent();
}
public OnButtonClick(object sender, RoutedEventArgs e)
{
complexObject = new MyComplexObject();
}
}
在单击按钮之前,不会创建complexObject
。 但是一旦单击该按钮,我希望有一个文本框绑定到complexObject.ID
开始显示Id。
如果可能的话,我想在XAML中这样做。
可以这样做吗? 如果是这样,怎么样?
是的,这可以完成,绑定到您使用所需值更新的属性。 我建议你研究一下MVVM模式(Model-View-ViewModel),这对于使用WPF很好地构建它非常有用。 观看此视频,了解MVVM视频
使用MMVM,您将创建一个类,它将是ViewModel类。 通常将此视图设置为View的DataContext。 完成后,您可以添加对类的其他属性的动态引用,例如将文本字段绑定到包含Id和ComplexObject的某个属性。 如果你的ViewModel类有一个属性ComplexObject,它又有一个属性ID,你只需要像这样绑定到对象:
<TextBlock Text="{Binding ComplexObject.ID}" />
有了这个,你可以通过鼠标点击触发你的ComplexObject的创建,理想情况下你应该设置为命令绑定。 另请注意,ViewModel类(或者持有ComplexObject的人需要在设置对象时通知View。这可以通过使ComplexObject成为DependencyProperty或通过使持有该属性的类实现INotifyPropertyChanged接口来完成 - 给出它是PropertyChanged函数来触发改变的事件。我更喜欢后者。
一种可能性是让您的XAML绑定到代码后面的属性。 如果complexObject!= null,则该属性的getter将返回complexObject.ID。 否则,它返回“default”,无论是null还是0或default( ID的类型 )。 同样,如果complexObject是,再一次,不为空该属性的setter方法将值分配给complexObject.ID。
public int ID
{
get
{
if (complexObject != null)
return complexObject.ID;
return 0; // or null or some appropriate default
}
set
{
if (complexObject != null)
complexObject.ID = value;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.