3

我在 ( OnSourceUpdated) 下面的事件没有得到处理。

XAML:

    <StackPanel x:Name="MyStackPanel" 
                Orientation="Horizontal" 
                DockPanel.Dock="Top">
        <TextBox Text="{Binding Side, Mode=TwoWay}" 
                 Width="100"/>
        <TextBlock Background="Yellow" 
                   Text="{Binding Side, Mode=OneWay, 
                                  NotifyOnSourceUpdated=True}"
                   Width="100" 
                   SourceUpdated="OnSourceUpdated"
                   Binding.SourceUpdated="OnSourceUpdated"/>
    </StackPanel>

C#:

....
MyStackPanel.DataContext = new MyItemClass() { Side = "Test" };
....

private void OnSourceUpdated(Object sender, DataTransferEventArgs args)
{
    var i = args.Property;
}

public class MyItemClass : INotifyPropertyChanged
{
    private string _side;
    public string Side
    {
        get { return _side; }

        set 
        {
            _side = value;
            OnPropertyChanged("Side");
        }
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    #endregion
}

我已经完成了所有相关设置,例如NotifyOnSourceUpdated& SourceUpdated&Binding.SourceUpdated等。

4

2 回答 2

5

来自msdnBinding.SourceUpdated附加事件在值从绑定目标传输到绑定源时发生,但仅适用于 NotifyOnSourceUpdated 值设置为 true 的绑定

在 TextBlock 的 Binding 中,没有从绑定目标 ( TextBlock.Text) 到绑定源 ( Side) 的值传递。因此 SourceUpdated 不能被触发。

相反,可以在第一次绑定时触发 SourceUpdated。实际上,这里的目标绑定TextBox.Text可以更改绑定源 ( Side)。

于 2012-10-23T07:17:20.100 回答
0

也许我遗漏了一些东西,但我认为你的更新方法有点奇怪。你有理由不只是一起去吗

<TextBlock Text="{Binding foo, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" ... />

如果您只对来自源的更新感兴趣,那通常是这样做的方式。打电话

OnPropertyChanged( "PropertyName" ) 

涵盖其余部分。

于 2012-10-23T06:59:17.383 回答