我在不同的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&lt; =&gt; B)。如果选中第一个对话框中的CheckBox,则还应检查第二个对话框中的CheckBox。我应该为此目的使用 ApplicationSettings 吗?
答案 0 :(得分: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是一个继承的依赖属性至关重要,这意味着在控件树中,如果一个元素没有set datacontext,它会自动获取其父级的datacontext。想象一下带有用户名和密码的登录对话框。如果您有一个具有两个属性(如用户名和密码)的简单模型,则只需将此模型设置为对话框的datacontext,并且所有控件都可以绑定到这些属性。回到您的示例,您只需将DataHolder的实例设置为窗口datacontext属性
public MainWindow()
{
InitializeComponents();
var model = new DataHolder();
DataContext = model;
}
现在您可以在xaml中使用绑定,如下所示
<CheckBox IsChecked="{Binding MyValue, Mode=TwoWay}"/>
多个控件可以绑定到同一个属性,并且在打开另一个视图时可以使用相同的模型。
最后一条建议,您应该阅读DataBinding chapter of the msdn并了解MVVM pattern是一个好主意,因为它广泛用于WPF取得了巨大成功。我们将它用于相当大的应用程序,并对它非常满意。