【问题标题】:WPF - Binding in XAML to an object created in the code behindWPF - 在 XAML 中绑定到在后面的代码中创建的对象
【发布时间】:2010-12-22 05:36:14
【问题描述】:

在代码(即 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 中这样做。

这可以吗?如果有,怎么做?

【问题讨论】:

    标签: c# wpf data-binding binding


    【解决方案1】:

    是的,这可以做到,绑定到您使用所需值更新的属性。我建议您研究一下 MVVM 模式(模型-视图-视图模型),这对于构建这个与 WPF 很好地协同工作非常有用。查看此视频以获得很好的概述: MVVM video

    使用 MMVM,您将创建一个类,该类将是 ViewModel 类。这通常会设置为视图的 DataContext。完成后,您可以添加对类的其他属性的动态引用,例如将您的文本字段绑定到一些持有 Id og the ComplexObject 的属性。如果您的 ViewModel 类有一个属性 ComplexObject,它又有一个属性 ID,您只需像这样绑定到该对象:

    <TextBlock Text="{Binding ComplexObject.ID}" /> 
    

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

    【讨论】:

      【解决方案2】:

      一种可能性是让您的 XAML 绑定到您代码后面的属性。如果 complexObject != null,该属性的 getter 将返回 complexObject.ID。否则,它会返回一些“默认值”,无论是 null、0 还是默认值(ID 的类型)。同样,如果 complexObject 再次不为空,则该属性的设置器会将 value 分配给 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;
          }
      }
      

      【讨论】:

      • +1 将建议实例化一个包含 MyComplexObject 对象的包装器对象 - 但您的方式更简洁:)
      猜你喜欢
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多