INotifyPropertyChanged问题

Ole*_*leg 7 data-binding wpf inotifypropertychanged

首先,我想说下面的示例过于简单化了.假设你绑定了WPF控件.

<Window Title="Window1" Height="300" Width="300">
<Grid>
    <StackPanel>
        <TextBox Text="{Binding Name}" Margin="10"/>
        <Button HorizontalAlignment="Center" 
        Content="Click Me" Margin="5" 
        Padding="2" Click="OnButtonClick" />
    </StackPanel>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

Window绑定到Person类,该类实现INotifyPropertyChanged并在表单中具有Name setter

    public string Name 
    {
        get { return _name; }
        set 
        {
            _name = "Some Name";
            OnPropertyChanged("Name");
        }
    }
Run Code Online (Sandbox Code Playgroud)

即只要用户尝试从UI更改它,就会为其分配"某些名称".但这个样本不起作用.我将TextBox中的名称更改为某个值按Tab键,强制焦点移动到Button,TextBox中的值保持不变,尽管触发了PropertyChanged事件.

你能解释一下为什么会这样吗?据我所知,PropertyChanged事件强制UI重新读取属性中的值并显示它们,但在我的示例中,数据绑定文本框中的值不会更新.


再次.我知道这是财产的不良实施,但我想重申,这是过于简单化.这只是一个样本.但无论如何,PropertyChanged表示属性已更改,应该更新,但事实并非如此.

Bub*_*rap 9

TextBox忽略PropertyChanged事件,因为它是事件的发起者.

一些澄清:

TextBox(或文本框上的绑定)知道它是发起者,因为它在同一个调用中接收PropertyChanged事件.通过执行异步调用,文本框(或绑定)无法知道它是启动器,因此它将处理事件,就像其他人已更新它一样

如果您在UI中添加第二个文本框,则会在编辑第一个文本时看到第二个TextBox发生更改,反之亦然.