Die Bindung an Komplexe Objekte in dem ViewModel von der Ansicht?
Sagen, ich habe zum Beispiel den folgenden Typ:
public class Site
{
public string Name { get; set; }
public int SiteId { get; set; }
public bool IsLocal { get; set; }
}
Den oben genannten Typ zugeordnet werden können, werden in einem Propety in eine ViewModel-wie vorausgesetzt, ein entsprechendes Feld sichern erstellt wurde, aber hier weggelassen ofc:
public Site SelectedSite
{
get { return _selectedSite; }
set
{
_selectedSite = value;
//raise property changed etc
}
}
In meiner xaml-eine unkomplizierte Bindung wäre:
<TextBlock x:Name="StatusMessageTextBlock"
Width="Auto"
Height="Auto"
Style="{StaticResource StatusMessageboxTextStyle}"
Text="{Binding MessageToDisplay,
Mode=OneWay,
UpdateSourceTrigger=PropertyChanged}" />
Können Sie ein bindendes mithilfe der dot-notation syntax? e.g:
<TextBlock x:Name="StatusMessageTextBlock"
Width="Auto"
Height="Auto"
Style="{StaticResource StatusMessageboxTextStyle}"
**Text="{Binding SelectedSite.Name,**
Mode=OneWay,
UpdateSourceTrigger=PropertyChanged}" />
Scheint wie ein ein Interessantes feature, aber mein Bauchgefühl ist nicht so mein DC zugewiesen wird zur Laufzeit so zur designzeit oder compile-Zeit, ich sehe keine Anhaltspunkte, die diese Funktion funktionieren oder nicht?
Korrigieren Sie mich, wenn falsch verstanden habe, was für ein Komplexes Objekt ist, habe ich vereinfachte mir für die Zwecke dieser Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist dies natürlich möglich. Jedoch, WPF muss wissen, wenn eine Eigenschaft entlang der Pfad geändert hat. Zu diesem Zweck implementieren müssen,
INotifyPropertyChanged
(oder anderen unterstützten Mechanismen). In deinem Beispiel beideSite
und die VM mitSelectedSite
sollte implementieren change notification).Hier, wie Sie könnten, die Funktionalität implementieren, die Sie angegeben haben in Ihrer Frage:
Und Ihr Blick könnte wie folgt Aussehen (unter der Annahme einer
DataContext
TypSitesViewModel
):Name
), dann ja. Wenn alle Eigenschaften, die in der Art sind readonly, dann gibt es keine Notwendigkeit zu implementierenINotifyPropertyChanged
, da keine Eigenschaft jemals ändern wird.Unten ist was für mich gearbeitet:
In meiner xaml-ich war in der Lage zu tun:
Diese ermöglicht den Zugriff auf Daten Mitglieder von der Website Geben, ohne dass Sie die einzelnen Eigenschaften, die wickeln jedes Daten-Mitglied auf der Website Geben. Dann die einzelnen Steuerelemente binden können, um jede Eigenschaft deklariert in der VM. In einer eins-zu-eins fashion, dieses Leitbild können zum Teil sehr ausführlich. Die Bindung Verlängerung angebracht, um die Text-Eigenschaft des TextBox-Steuerelements oben dargestellt, zeigt, dass wir nicht die Bindung an eine einfache straight-forward-Eigenschaft, sondern tatsächlich um einen benutzerdefinierten Typ. Möglicherweise entfernen die Notwendigkeit der Schaffung von mehr öffentlichen Eigenschaften.