2016-05-06 5 views
0

Meine MainView hat ein ViewModel namens MainViewModel. MainViewModel schafft einen Dialog, und ich möchte, dass die Dialoge Ansichtsmodell die bereits MainViewModel bestehenden seinDisplayMemberPath wird nicht angezeigt Property - Eigenschaft nicht in 'ViewModel' gefunden

Um den Dialog aus dem I

var MyInnerDlg = new MyInnerDlgView(); 
MyInnerDlg.DataContext = this; 
MyInnerDlg.ShowDialog(); 

im Dialog do

MainViewModel zu erstellen habe ich eine ListBox, die ich auf eine Sammlung binden aus mein MainViewModel

public ObservableCollection<MyItemViewModel> MyList { get; set; } 

XAML des Dialogs

<Border Margin="5" BorderThickness="2"> 
    <ListBox ItemsSource="{Binding MyList}" DisplayMemberPath="{Binding MyList.Name}" /> 
</Border> 

Die Name Eigenschaft ist in MyItemViewModel. Mit dem obigen Code bekomme ich den Fehler:

Name property not found in MainViewModel.

Wie kann ich auf jedes der Elemente beziehen Name Eigenschaft?

+1

Versuchen Sie 'DisplayMemberPath =" Name "' auf Ihrer 'ListBox' – Bijington

+0

Ich tat, aber es versucht immer, es auf dem MainViewModel zu finden. – user2837961

+0

Hat Ihre 'MyItemViewModel' Klasse eine' Name' Eigenschaft? – Bijington

Antwort

0

Versuchen verändert sich:

<ListBox ItemsSource="{Binding MyList}" DisplayMemberPath="{Binding MyList.Name}"> 

An:

<ListBox ItemsSource="{Binding MyList}" DisplayMemberPath="{Binding Name}"> 

Oder versuchen Sie:

<Page.Resources> 
    <local:MyItemViewModel x:Key="DataContext" /> 
</Page.Resources> 

<ListBox DataContext="{StaticResource DataContext}" ItemsSource="{Binding MyList}" DisplayMemberPath="{Binding MyList.Name}"> </ListBox> 

ich in der Regel ein Ansichtsmodell in der XAML-Datei selbst hinzufügen.

<Page.Datacontext> 
    <local:MyItemViewModel/> 
</Page.Datacontext> 
+0

Scheint jemand war schneller mit dem gleichen Vorschlag. – Developer

+0

würde das nicht ein neues ViewModel erstellen? Es scheint, dass OP sich auf das bereits bestehende beziehen will. – Default

+0

oh ok. Habe das nicht verstanden. – Developer

2

DisplayMemberPath sollte wohl kein Binding sein. Ändern Sie es auf die Eigenschaft Name der Eigenschaft, die Sie anzeigen möchten, das heißt "Name"

<ListBox ItemsSource="{Binding MyList}" DisplayMemberPath="Name" /> 

Auch ein allgemeiner Vorschlag ist not to have public setters on lists, da Sie nicht vertieften Verhalten bekommen. Verwenden Sie stattdessen ein Hintergrundfeld und entfernen Sie den Setter.

Verwandte Themen