Tôi đang chơi với WPF Binding và các biến. Rõ ràng người ta chỉ có thể gắn DependencyProperties. Tôi đã đưa ra những điều sau đây, hoạt động hoàn toàn tốt đẹp: Các code-behind file:WPF Ràng buộc với biến/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>
Hai textbox cập nhật một một khác. Và nút đặt chúng thành "AAA".
Nhưng bây giờ tôi đã thay thế hàm Setter bằng hàm được nhận xét (mô phỏng một số thao tác của giá trị đã cho). Tôi hy vọng rằng bất cứ khi nào giá trị tài sản được thay đổi, nó sẽ được đặt lại thành "BBB". Nó làm như vậy khi bạn nhấn nút, đó là khi bạn đặt thuộc tính trong mã. Nhưng nó cho một số lý do không ảnh hưởng đến Bindings WPF, đó là bạn có thể thay đổi nội dung TextBox và do đó tài sản, nhưng dường như Setter không bao giờ được gọi. Tôi tự hỏi tại sao đó là như vậy, và làm thế nào người ta sẽ đi về để đạt được hành vi mong đợi.
thể trùng lặp của [WPF: tài sản XAML khai báo không được thiết lập thông qua Setters?] (http://stackoverflow.com/questions/3836076/wpf-xaml-property-declarations-not-being-set-via-setters) –