WPF – 在XAML中绑定到后面的代码中创建的对象

可以在代码中创建的对象(即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中这样做。

可以这样做吗? 如果是这样,怎么样?

一种可能性是让您的XAML绑定到代码后面的属性。 如果complexObject!= null,则该属性的getter将返回complexObject.ID。 否则,它返回“default”,无论是null还是0或default( ID的类型 )。 类似地,如果complexObject同样不为null,则该属性的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; } } 

是的,这可以完成,绑定到您使用所需值更新的属性。 我建议你研究一下MVVM模式(Model-View-ViewModel),这对于使用WPF很好地构建它非常有用。 观看此video以获得精彩概述: MVVMvideo

使用MMVM,您将创建一个类ViewModel类。 通常将此视图设置为View的DataContext。 这样做之后,您可以添加对类的其他属性的动态引用,例如将文本字段绑定到包含Id和ComplexObject的某个属性。 如果你的ViewModel类有一个属性ComplexObject,它又有一个属性ID,你只需要像这样绑定到对象:

  

有了这个,你可以通过鼠标点击触发你的ComplexObject的创建,理想情况下你应该将其设置为命令绑定。 还要注意,ViewModel类(或任何持有ComplexObject的人需要在设置对象时通知View。这可以通过使ComplexObject成为DependencyProperty或通过使持有该属性的类实现INotifyPropertyChanged接口来完成 – 给出它是PropertyChanged函数来触发更改的事件。我更喜欢后者。