Wie kann ich binden, in den Vordergrund, um eine Eigenschaft im ViewModel?
Ich würde gerne binden, die foreground-Eigenschaft eines TextBlock-eine Eigenschaft im ViewModel.
Dies nicht funktioniert :
Bearbeiten
Anzeigen :
TextBlock
Text="{Binding Path=FullName, Mode=OneWay}"
Foreground="{Binding Path=ForegroundColor}"
Margin="0 5 3 5"
Code hinter:
CustomerHeaderViewModel customerHeaderViewModel = new CustomerHeaderViewModel();
customerHeaderViewModel.LoadCustomers();
CustomerHeaderView.DataContext = customerHeaderViewModel;
View Modell:
private System.Windows.Media.Brush _foregroundColor;
_foregroundColor = System.Windows.Media.Brushes.DarkSeaGreen;
public System.Windows.Media.Brush ForegroundColor
{
get { return _foregroundColor; }
set { _foregroundColor = value;
OnPropertyChanged("ForegroundColor");
}
}
public CustomerHeaderViewModel()
{
ForegroundColor = System.Windows.Media.Brushes.Red;
}
Alle anderen Eigenschaften (Text etc) richtig binden.
Was mache ich falsch?
Wo sind Sie Einstellung
_foregroundColor
? Im ctor deiner VM?InformationsquelleAutor Joe.Net | 2011-04-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen Sie, ob Ihre Lösung ist so:
Ansicht:
ViewModel:
und denken Sie daran, dass, wenn Sie festlegen möchten neuer Wert für ForegroundColor in der VM Sie sholud tun Sie es so:
erhöhen PropertyChangedEvent
Accordind zu neuen Informationen über Ihr problem sind, Sie könnten versuchen, diese Lösung:
CustomerHeaderViewModel.cs
CustomerHeaderView.xaml
Im vorgestellten Szenario die ForegroundColor Eigenschaft befindet sich in CustomerHeaderViewModel.cs so ist es, Mehrwert für die Kunden. In CustomerHeaderView.xaml ich Hinzugefügt x:Name für das Benutzersteuerelement, um eine Möglichkeit zu finden DataContext dieses element. Wenn Sie nicht möchten, verwenden Sie " x:Name für UserControl, können Sie versuchen, diese:
Denken Sie daran, dass der DataContext dieses Steuerelements festgelegt wurde früher im Hauptfenster.cs.
MainWindow.cs
Ich don ' T uderstand kann genau das Szenario ein, und was könnte schief gelaufen ist, aber zu ändern versuchen, eine Art von ForegroundColor von Pinsel zu SolidColorBrush.
Dank PawelSt, die Vorder-Bindung war nicht meine app, also ging ich zurück zu den Grundlagen, heruntergeladen und geändert Edward Tanguay s Beispiel : tanguay.info/web/index.php?pg=codeExamples&id=139 ändern Sie die Foreground-Eigenschaft eines TextBlock zugewiesen, in der Hoffnung zu beheben mein problem gibt und übertragung auf die Lösung meiner app..
.. der obige code stammt aus der (geänderten) heruntergeladene app..
Ich verbesserte meine Antwort, so überprüfen Sie, ob diese neue Lösung, die für Sie arbeitet.
InformationsquelleAutor PawelSt
Dies ist nicht eine gute Praxis zu legen UI-Elementen im view-Modell. Ihrer Ansicht Modell muss nur Kapseln business locig.
Wenn Sie die Farbe ändern möchten etwas in Ihrem UI-das hängt davon ab, auf den Wert deiner textbox, es ist eine bessere Praxis, um die Daten verwenden, löst in XAML.
Können Sie dies so tun :
Viewmodel :
XAML (Bearbeitet um den Farbwähler zu öffnen, vorausgesetzt, der gewählte Wert der Kontrolle mit dem Namen "SelectedValue" und, gibt es ein Brush-Objekt)
Wenn Sie können, binden Sie den ausgewählten Wert Ihrer Farbauswahl, um Ihre view-Modell, dann können Sie binden direkt an die Foreground-Eigenschaft für das Textfeld direkt an Sie, Farbauswahl 🙂 ich habe bearbeitet Sie meine Antwort um ein Beispiel zu geben. Nichts einfacher, und keine Notwendigkeit für die Verwendung der viewmodel mehr! Also, jedes mal, wenn der Benutzer ändert den Wert in der Farbauswahl, muss es automatisch aktualisieren Sie Ihre textbox Vordergrund, alle in XAML zu binden 🙂
Vielen Dank für Ihre Zeit und Anregungen, Bruno. Ich habe mehrere Benutzer-Steuerelemente in meine app und Ihre viewmodels sind aktualisiert durch Anmeldung zu einem event aggregator-Ereignis, also das 'Binding ElementName=colorpicker' nicht funktionieren würde.... das ist, warum ich ging zurück zu den Grundlagen einfach zu lösen dieses problem, indem Sie geladen werden muss und zur änderung der Tanguay, Edward - B. : tanguay.info/web/index.php?pg=codeExamples&id=139 ändern der Vordergrund-Eigenschaft eines TextBlock zugewiesen, in der Hoffnung zu beheben mein problem gibt und übertragung auf die Lösung meiner app
InformationsquelleAutor Bruno