バインドの設定で、Binding.NotifyOnTargetUpdated プロパティを true にすると、バインディングターゲットの値が更新されたときに、TargetUpdated イベントが発生します。
TargetUpdated イベントの引数 DataTransferEventArgs の Property プロパティで、どのプロパティの値が更新されたかがわかります。
サンプルでは、ボタンをクリックするとバインディングソースの値を1加算し、TargetUpdated イベントの処理でメッセージボックスを表示します。
MainWindow.xaml
<Window x:Class="BindingTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="200" Width="300">
<StackPanel>
<TextBlock Name="textBlock1" Text="{Binding Path=Count, NotifyOnTargetUpdated=True}"
TargetUpdated="textBlock1_TargetUpdated" />
<Button Click="Button_Click">バインディングソースの値を変更</Button>
</StackPanel>
</Window>
MainWindow.xaml.cs
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace BindingTest
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new Class1();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Class1 class1 = (Class1)this.DataContext;
class1.Count++;
}
private void textBlock1_TargetUpdated(object sender, DataTransferEventArgs e)
{
if (e.Property == TextBlock.TextProperty)
{
MessageBox.Show("カウント:"+ this.textBlock1.Text);
}
}
}
}
Class1.cs
using System.ComponentModel;
namespace BindingTest
{
public class Class1 : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
private int count;
public int Count
{
get { return this.count; }
set
{
if (value != this.count)
{
this.count = value;
NotifyPropertyChanged("Count");
}
}
}
}
}
0 件のコメント:
コメントを投稿