0

我在不同 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吗?

4

1 回答 1

2

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 是一个继承的依赖属性,这意味着在控件树中,如果一个元素没有设置数据上下文,它会自动获取其父级的数据上下文。考虑一个带有用户名和密码的登录对话框。如果你有一个简单的模型,它有两个属性,比如用户名和密码,你只需将此模型设置为对话框的数据上下文,所有控件都可以绑定到这些属性。回到您的示例,您只需将 DataHolder 的一个实例设置为您的窗口 datacontext 属性

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

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

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

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

最后一个建议,您应该阅读msdn 的 DataBinding 一章,这是了解MVVM 模式的好主意,因为它与 WPF 一起广泛使用并取得了巨大成功。我们将它用于相当大的应用程序并且对它非常满意。

于 2012-11-28T11:19:20.530 回答