我的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属性?
答案 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>