XAML unten in MainWindow.xaml Mit:Standard Datacontext
<Window x:Class="TestDependency.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Label Name="someLabel" Grid.Row="0" Content="{Binding Path=LabelText}"></Label>
<Button Grid.Row="2" Click="Button_Click">Change</Button>
</Grid>
</Window>
Und der folgende Code hinter in MainWindow.xaml.cs:
public static readonly DependencyProperty LabelTextProperty = DependencyProperty.Register("LabelText", typeof(String), typeof(MainWindow));
public int counter = 0;
public String LabelText
{
get
{
return (String)GetValue(LabelTextProperty);
}
set
{
SetValue(LabelTextProperty, value);
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
LabelText = "Counter " + counter++;
}
Ich hätte gedacht, dass die Standard-DataContext
ist der Code dahinter. Aber ich bin gezwungen, die DataContext
anzugeben. Welche DataContext
ist die Standardeinstellung?Null
? Ich hätte gedacht, dass der Code dahinter wäre (wie es die gleiche Klasse ist).
Und wie in diesem Beispiel hinter dem Code Ich bin mit dem Inhalt des Etiketts zu ändern, konnte ich direkt verwenden:
someLabel.Content = "Counter " + counter++;
ich, dass der Code hinter sein werde erwartet, sollte es nicht hat Das UI Update-Problem, das Sie haben, wenn die DataContext
in einer anderen Klasse ist.
ich, dass der binding/datacontext von der übergeordneten geerbt wird, wenn nicht angegeben. Andernfalls führt das Festlegen des Datenkontexts für die Fensterklasse immer noch nicht zum Ergebnis. –
@MiyamotoAkira: Sicher, es ist geerbt (die Dokumentation für 'DataContext' sagt das auch). Aber warum erwartest du, dass dein MainWindow standardmäßig der 'DataContext' ist? Die Bindemaschine kann Ihre Gedanken nicht lesen. – Jon
Ich nehme an, weil ich "MainWindow" als oberste Hierarchie für dieses Programm sehe. Aber dann weiß ich nicht, was WPF unter der Haube macht (noch :-)), und wahrscheinlich gibt es noch andere Dinge dazu. –