繁体   English   中英

WPF - 在不同的对话框上绑定两个属性

[英]WPF - binding two properties on the different dialogs

我在不同的XAML文件中与CheckBox相关的不同对话框(类)有两个选项:

第一对:

C#:

public class FirstClass : DependencyObject
{
   public static readonly DependencyProperty testProperty = 
      DependencyProperty.Register("testProperty", typeof(bool),
      typeof(FirstClass), 
      new UIPropertyMetadata(false));

   public bool testProperty
   {
      get { return (bool)this.GetValue(testProperty); }
      set { this.SetValue(testProperty, value); }
   }
}

XAML:

<CheckBox IsChecked="{Binding Path=testProperty, Mode=TwoWay}">

第二对:

C#

public class SecondClass : DependencyObject
{
   public static readonly DependencyProperty testProperty =
      FirstClass.testProperty.AddOwner(typeof(SecondClass));

   public bool testProperty
   {
      get { return (bool)this.GetValue(testProperty); }
      set { this.SetValue(testProperty, value); }
   }
}

XAML:

<CheckBox IsChecked="{Binding Path=testProperty, Mode=TwoWay}">

我想将第一个对话框中的选项绑定到第二个对话框中的选项(A <=> B)。 如果选中第一个对话框中的CheckBox,则还应检查第二个对话框中的CheckBox。 我应该为此目的使用ApplicationSettings吗?

DataBinding不仅是两个依赖项属性之间的绑定过程,也是一个CLR和一个依赖项属性之间的绑定过程。 实际上,它通常是最常见的绑定方案。 所以你可以做的是使用一个模型对象来存储你的ui元素的值,并在另一个视图或另一个控件中重用它。 首先,我建议你不要使用DependencyObject派生对象作为你的数据持有者,虽然它仍然有效,它也有它的缺点。

首先是我们的数据对象,它只存储我们的数据。 请查看如何实现INotifyPropertyChanged接口,因为我为了可读性而离开了实现。

class DataHolder : INotifyPropertyChanged
{
    public bool MyValue
    {
        get{return mMyValue;}
        set{mMyValue = value; RaiseProperty("MyValue");}
    }

    private bool mMyValue;
}

现在可以借助UI DataContext将此对象轻松绑定到ui元素。 知道DataContext是一个继承的依赖属性至关重要,这意味着在控件树中,如果一个元素没有set datacontext,它会自动获取其父级的datacontext。 想象一下带有用户名和密码的登录对话框。 如果您有一个具有两个属性(如用户名和密码)的简单模型,则只需将此模型设置为对话框的datacontext,并且所有控件都可以绑定到这些属性。 回到您的示例,您只需将DataHolder的实例设置为窗口datacontext属性

public MainWindow()
{
    InitializeComponents();
    var model = new DataHolder();
    DataContext = model;
}

现在你可以在你的xaml中使用像这样的绑定

<CheckBox IsChecked="{Binding MyValue, Mode=TwoWay}"/>

多个控件可以绑定到同一个属性,并且在打开另一个视图时可以使用相同的模型。

最后一条建议,您应该阅读msdnDataBinding章节,并且最好查看MVVM模式,因为它广泛用于WPF,取得了巨大的成功。 我们将它用于相当大的应用程序,并对它非常满意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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