[英]Binding two different Properties to one TextBlock based on boolean value in 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}"/>
多个控件可以绑定到同一个属性,并且在打开另一个视图时可以使用相同的模型。
最后一条建议,您应该阅读msdn的DataBinding章节,并且最好查看MVVM模式,因为它广泛用于WPF,取得了巨大的成功。 我们将它用于相当大的应用程序,并对它非常满意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.