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&&などの関連するすべての設定を行いましたSourceUpdatedBinding.SourceUpdated

4

2 に答える 2

5

msdnから:Binding.SourceUpdated添付イベントは、値がバインディングターゲットからバインディングソースに転送されるときに発生しますが、NotifyOnSourceUpdated値がtrueに設定されているバインディングの場合のみです。

TextBlockのバインディングでは、バインディングターゲット(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 に答える