Używam funkcji wiązania WPF i zmiennych. Najwyraźniej można związać tylko DependencyProperties. I mają pochodzić z następujących, które działa perfekcyjnie: opóźnieniem kodu pliku:WPF Wiązanie ze zmienną/DependencyProperty
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>
Dwa tekstowych aktualizacji jednego innego. A przycisk ustawia je na "AAA".
Ale teraz zastąpiłem funkcję Settera tym, który został skomentowany (symulując pewne manipulowanie podaną wartością). Spodziewam się, że za każdym razem, gdy zmieni się wartość nieruchomości, zostanie ona zresetowana do "BBB". Robi to po naciśnięciu przycisku, czyli po ustawieniu właściwości w kodzie. Ale z jakiegoś powodu nie ma wpływu na Wiązania WPF, czyli można zmienić zawartość TextBox, a tym samym właściwość, ale najwyraźniej Setter nigdy nie jest wywoływany. Zastanawiam się, dlaczego tak się dzieje i jak można osiągnąć oczekiwane zachowanie.
możliwy duplikat [WPF: własność XAML deklaracje nie są ustawiane za pomocą ustawiaczy?] (http://stackoverflow.com/questions/3836076/wpf-xaml-property-declarations-not-being-set-via-setters) –