DisplayMemberPath不显示属性 - 在“ViewModel”中找不到属性

时间:2016-05-06 11:14:21

标签: c# wpf xaml

我的MainView有一个名为MainViewModel的ViewModel。 MainViewModel创建了一个对话框,我希望对话框ViewModel成为现有的MainViewModel

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。使用上面的代码我得到错误:

  

MainViewModel中找不到名称属性。

如何引用每个项目Name属性?

2 个答案:

答案 0 :(得分:2)

DisplayMemberPath可能不应该是Binding。将其更改为要显示的属性的属性名称,即"Name"

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

此外,一般建议是not to have public setters on lists,因为您可以获得无缩进的行为。而是使用支持字段并删除设置器。

答案 1 :(得分:0)

尝试更改:

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

要:

 <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>

通常我会在xaml文件中添加一个ViewModel。

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