gpt4 book ai didi

wpf - Mode = OneWay 直接赋值给 DependencyProperty 的绑定(bind)损坏

转载 作者:行者123 更新时间:2023-12-03 10:21:27 28 4
gpt4 key购买 nike

我有一段非常简单的代码来理解当我们将绑定(bind)表达式分配给任何依赖项属性然后将直接值分配给该依赖项属性时发生的行为。以下是代码

查看 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");
}
}

}

现在我的观察是
  • 当我单击“分配绑定(bind)值”时, View 将更新为绑定(bind)源值。 ( 果然 )
  • 当我单击“分配直接值”时, View 会更新为分配给文本字段的直接值( 正如预期的 )
  • 我假设在这个阶段绑定(bind)被破坏了,当我再次单击“分配绑定(bind)值”时它应该不起作用,意味着没有 UI 更新。它符合我的预期( 正如预期的 )
  • 令人困惑的一点是,当我将绑定(bind)模式设置为“TwoWay”时,第 3 点没有发生,并且无论我按下什么按钮,它都始终保持工作状态。来自绑定(bind)源和直接值(value)。 ( 我不清楚双向绑定(bind)需要用这个 做什么)

  • 有人请澄清一下吗?

    最佳答案

    设置时DependencyProperty值,DependencyObject检查新值是否为 BindingExpression或不。如果不是,它检查先前的值是否是绑定(bind)表达式。对于先前的绑定(bind)表达式,它会尝试设置表达式的值。 BindingExpression 在尝试设置值时检查模式,对于 OneWay,它在不设置值的情况下返回 false,并停用和分离依赖属性的绑定(bind)表达式。因此对于 Mode=OnWay ,绑定(bind)被停用和分离的依赖属性。

    对于 TwoWay , 自 BindingExpression能够设置值,因此绑定(bind)不会被停用并继续工作。

    关于wpf - Mode = OneWay 直接赋值给 DependencyProperty 的绑定(bind)损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36639264/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com