Entwickler-Ecke
WPF / Silverlight - Binding auf ein Object [MVVM]
Sestriel - Do 25.06.15 09:32
Titel: Binding auf ein Object [MVVM]
Guten Morgen,
ich habe aktuell ein Projekt, für welches ich in WPF das MVVM-Pattern benutzen muss(Was nicht gerade einfach ist, wenn man vorher nie mit WPF o.ä gearbeitet hat :D .
Nun habe ich ein Problem, ich muss an eine ComboBox ein Objekt binden bzw die Property des Objektes.
Laut Google geht dies relativ einfach via
<ComboBox ItemsSource="{Binding location.name, UpdateSourceTrigger=PropertyChanged}"[...], jedoch scheint dies bei mir nicht so recht zu wollen.
Hier mal ein paar Ausschnitte aus meinem Code.
XAML des Controls:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| x:Class="StandortbeschreibungNEW.Controls.ucStandortControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:myViewModels="clr-namespace:StandortbeschreibungNEW.ViewModels" d:DataContext="{d:DesignInstance myViewModels:vmStandort}" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="300">
<Grid> <ComboBox ItemsSource="{Binding location.name, UpdateSourceTrigger=PropertyChanged}" x:Name="comboBox" HorizontalAlignment="Left" Margin="170,10,0,0" VerticalAlignment="Top" Width="200" SelectedValuePath="{Binding /}" /> </Grid>
</UserControl> |
Der relevante Teil des Models:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| public class mStandort : Model {
private string _name = "Hallo"; public string name { get { return _name; } set { _name = value; RaisePropertyChanged(() => name); } } |
und hier ein Ausschnitt aus der ViewModel
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| public class vmStandort : ViewModel { public vmStandort() { init(); mStandort location = new mStandort(); location.name = "Gr. Standortbeschreibung"; }
private void init() { LoadHeadNodes(); if (HeadNodes != null) { LoadChildNodes(HeadNodes); } } [...] } |
Hoffe mir kann jemand weiterhelfen,
MfG
Ps: Alles zur Entwicklung grafischer Oberflächen mit der Windows
Presentiation Foundation (Windows.Controls-Namespace), XAML, Silverlight, XBAP - Das markierte "i" ist zu viel, sorry :shock:
Th69 - Do 25.06.15 11:50
Hallo und :welcome:
so einfach geht das nun auch wieder nicht. ;-) Das Binding funktioniert nicht mit lokalen Variablen, sondern nur mit öffentlichen Eigenschaften (public properties)!
Du mußt also zum einen das ViewModel als
DataContext entweder des Windows oder der ComboBox setzen und dann als zweites eine Eigenschaft definieren, welche die Liste bereitstellt (und diesen Eigenschaftennamen gibt du dann beim Binding an). Hinzu kommt, daß du dann in der Eigenschaft die
INotifyPropertyChanged-Schnittstelle aufrufen mußt. Schau dir mal den ersten Artikel in meinen Beitrag zu
Binding aktualisiert nicht [
http://www.entwickler-ecke.de/viewtopic.php?p=694628#694628] an.
PS: Danke für das Melden des Rechtschreibfehlers - habe es im Team weitergegeben.
Sestriel - Do 25.06.15 12:46
Gilt in dem Fall mein Property des Model-Objektes, also mein
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| public string name { get { return _name; } set { _name = value; RaisePropertyChanged(() => name); } } |
also die öffentliche Eigenschaft?
Denn dort habe ich ja sowohl die INotifyPropertyChanged-Schnittstelle genutzt, als auch eine rückgabe des aktuellen Wertes.
Edit: Ich habe in den letzten Stunden meinen Code um einiges erweitert.
Nun wird eine ObservableCollection mit x-Objekten(Abhängig von der XML Datei) gefüllt und diese Objekte sind ebreits mit Daten gefüllt.
Moderiert von Th69: Full Quote entfernt.
Ralf Jansen - Do 25.06.15 13:12
Du bindest View und ViewModel nicht das Model. Wenn es eine direkte Bindung zwischen View und Model gäbe wäre das Viewmodel ja auch eher überflüssig :gruebel:
Also nein die Property am Model hilft dir hier nicht nur beim kommunizieren zwischen ViewModel und Model.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!