WPF Binding-variable / DependencyProperty
Ich bin Herumspielen mit WPF Verbindlich und Variablen. Anscheinend kann man nur binden DependencyProperties. Ich habe kommen mit dem folgenden, das funktioniert einwandfrei:
Die code-behind-Datei:
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>
Die zwei Textfelder aktualisieren einen anderen. Und die Taste die Einstellung zu "AAA".
Aber jetzt habe ich ersetzt die Set-Funktion ist auskommentiert (Simulation einige manipulation der angegebene Wert). Ich würde erwarten, dass, wenn der Wert der Eigenschaft geändert wird, wird es wieder auf "BBB". Es tut dies, wenn Sie drücken Sie die-Taste, wenn Sie die Eigenschaft im code. Aber es funktioniert aus irgendeinem Grund nicht auf die WPF-Bindings, das heißt, Sie können ändern, der Inhalt der TextBox und damit das Eigentum, aber anscheinend ist der Setter wird nie genannt.
Ich Frage mich, warum das so ist, und wie man mit würde zu erreichen zu erwartende Verhalten.
InformationsquelleAutor PeterE | 2010-12-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die CLR-Eigenschaft wrapper für eine Abhängigkeitseigenschaft ist nie garantiert aufgerufen werden, und daher sollten Sie nie jede zusätzliche Logik gibt. Wenn Sie benötigen zusätzliche Logik, wenn DP geändert wird, sollten Sie die callback-Eigenschaft verändert.
In Ihrem Fall..
InformationsquelleAutor Fredrik Hedblad
Ihre änderung wird keine Auswirkungen auf die Bindung, da der XAML-Aufruf SetValue direkt anstelle des Aufrufs von Ihrer Immobilie setter.Das ist, wie die dependency property system funktioniert.Wenn eine Abhängigkeitseigenschaft registriert ist, kann ein default-Wert angegeben werden.Dieser Wert wird zurückgegeben von GetValue und ist der default-Wert für Ihre Immobilie.
Überprüfen Sie den link unten und Lesen Sie sich durch, um Robert Rossney Beitrag zu einer fairen überblick
WPF: Was unterscheidet eine Abhängigkeitseigenschaft vom normalen CLR-Eigenschaft?
auch nicht verpassen
http://msdn.microsoft.com/en-us/library/ms753358.aspx
und
http://msdn.microsoft.com/en-us/library/ms752914.aspx
Beachten Sie auch, dass im Gegensatz zu normalen CLR-Eigenschaften benutzerdefinierten Logik schreiben Sie in die Set-Anweisung nicht ausgeführt werden in Abhängigkeit der Eigenschaften,anstatt Sie zu verwenden haben, PropertyChangedCallback Mechanismus
http://blogs.msdn.com/b/delay/archive/2010/03/23/do-one-thing-and-do-it-well-tip-the-clr-wrapper-for-a-dependencyproperty-should-do-its-job-and-nothing-more.aspx
InformationsquelleAutor biju