私はWPFバインディングと変数を使用して遊んでいます。明らかにDependencyPropertiesのみをバインドできます。私は完全に正常に動作され、次が出ている: コードビハインドファイル:変数/ DependencyPropertyへのWPFバインド
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public string Test
{
get { return (string)this.GetValue(TestProperty); }
set { this.SetValue(TestProperty, value); }
//set { this.SetValue(TestProperty, "BBB"); }
}
public static readonly DependencyProperty TestProperty = DependencyProperty.Register(
"Test", typeof(string), typeof(MainWindow), new PropertyMetadata("CCC"));
private void button1_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(Test);
Test = "AAA";
MessageBox.Show(Test);
}
}
XAML:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:diag="clr-namespace:System.Diagnostics;assembly=WindowsBase"
Title="MainWindow" Height="350" Width="525"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<TextBox Height="31" HorizontalAlignment="Left" Margin="84,86,0,0" Name="textBox1" VerticalAlignment="Top" Width="152"
Text="{Binding Test, Mode=TwoWay, diag:PresentationTraceSources.TraceLevel=High}"/>
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="320,85,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
<TextBox Height="31" HorizontalAlignment="Left" Margin="84,138,0,0" Name="textBox2" Text="{Binding Test, Mode=TwoWay}" VerticalAlignment="Top" Width="152" />
</Grid>
2つのTextBoxを1他を更新します。ボタンで「AAA」に設定されます。
しかし、私は、Setter関数をコメントアウトされたもの(指定された値の操作をシミュレートする)で置き換えました。私はプロパティの値が変更されるたびに "BBB"にリセットされることを期待しています。これは、コード内でプロパティを設定するときにボタンを押すと実行されます。しかし何らかの理由でWPFバインディングに影響しません。つまり、TextBoxの内容とプロパティを変更できますが、Setterは決して呼び出されません。 私はそれがなぜそうであるのか、誰がどのようにして期待される行動を起こすのだろうと思います。
[WPFの可能な複製をPropertyChangedCallbackメカニズムを使用する必要があり、通常のCLRプロパティとは異なりますが、セッターで書く任意のカスタムロジックは依存関係プロパティで実行されないことに注意してください宣言はSetters経由で設定されていませんか?](http://stackoverflow.com/questions/3836076/wpf-xaml-property-declarations-not-being-set-via-setters) –