2016-05-06 4 views
0

My MainView имеет ViewModel под названием MainViewModel. MainViewModel создает диалог, и я хочу, чтобы диалоги ViewModel быть уже существующим MainViewModelDisplayMemberPath не отображается Property - свойство не найдено в 'ViewModel'

Чтобы создать диалог с MainViewModel я

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

В диалоговом окне У меня есть ListBox, который я связываться с коллекцией из мой MainViewModel

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

XAML диалогового

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

Name Недвижимость находится в MyItemViewModel. С приведенным выше кодом я получаю сообщение об ошибке:

Name property not found in MainViewModel.

Как я могу обратиться к каждому из объектов Name property?

+1

Попробуйте 'DisplayMemberPath =" Name "' в вашем 'ListBox' – Bijington

+0

Я сделал, но он всегда пытается найти его в MainViewModel. – user2837961

+0

Имеет ли ваш класс 'MyItemViewModel' свойство' Name'? – Bijington

ответ

0

Попробуйте изменить:

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

To:

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

Или попробуйте добавить:

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

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

Обычно я добавить ViewModel в самом XAML файле.

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

Кажется, кто-то был быстрее с тем же предложением. – Developer

+0

не создадут новый ViewModel? Кажется, OP хочет ссылаться на уже существующую. – Default

+0

oh ok. Не поймал этого. – Developer

2

DisplayMemberPath, вероятно, не будет Binding. Измените его имя свойства собственности, которые вы хотите отобразить, т.е. "Name"

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

Кроме того, общее предложение not to have public setters on lists, так как вы можете получить отступ поведения. Вместо этого используйте фоновое поле и удалите установщик.

Смежные вопросы