繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM