我有一段非常简单的代码来理解当我们将Binding表达式分配给任何依赖项属性然后为该依赖项属性分配直接值时会发生什么的行为。以下是代码
查看XAML
<StackPanel>
<Button Click="Button_Click" Content="Assign binding value" />
<Button Click="Button_Click_1" Content="Assign direct value" />
<TextBox Text="{Binding TextSource, Mode=OneWay}" x:Name="stf" />
</StackPanel>
查看XAML.cs
public partial class MainWindow : Window
{
MainViewViewModel vm = new MainViewViewModel();
public MainWindow()
{
InitializeComponent();
DataContext = vm;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
vm.TextSource = "Value set using binding";
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
stf.Text = "New direct value";
}
}
视图模型
public class MainViewViewModel : INotifyPropertyChanged
{
//INotifypropertychanged implementation here ...
private string _textSource;
public string TextSource
{
get { return _textSource; }
set
{
_textSource = value;
OnPropertyChanged("TextSource");
}
}
}
现在我的观察是
有人请澄清一下吗?
答案 0 :(得分:2)
我认为TwoWay
绑定会将视图模型中属性的值分配给UI元素的依赖项属性,以及如果您在任何时候更改值的值依赖属性(例如,当您按下按钮&#34;分配直接值&#34;)然后依赖属性的新值也将分配给视图模型中的属性。
换句话说,我认为TowWay
模式实际上意味着可以将值从视图模型分配到UI,从UI分配到视图模型。
答案 1 :(得分:2)
设置DependencyProperty
值时,DependencyObject
会检查新值是否为BindingExpression
。如果不是,则检查先前的值是否为绑定表达式。对于先前的绑定表达式,它尝试设置表达式的值。尝试设置值时BindingExpression检查模式,对于OneWay,它返回false而不设置值,并取消激活并分离依赖项属性的绑定表达式。因此,对于Mode=OnWay
,绑定将针对依赖项属性进行停用和分离。
对于TwoWay
,由于BindingExpression
能够设置值,因此绑定不会停用并继续有效。