Wpf 主从列表视图绑定
Posted
技术标签:
【中文标题】Wpf 主从列表视图绑定【英文标题】:Wpf master detail listview binding 【发布时间】:2014-04-02 13:25:14 【问题描述】:我有一个这个模型(它不是实际代码,为了清楚起见,我省略了 INotifyPropertyChanged 实现)。
public class Project
public ObservableCollection<Component> Components get; set;
public class Component
public ObservableCollection<Item> Items get; set;
public class Item
public LookupItem LookupItem get; set;
这是 ViewModel
public class ViewModel
public Project Project get; set;
public Components get return Project.Components;
public ObservableCollection<LookupItem> LookupItems get; set;
在视图中,我有两个列表视图,一个显示组件,另一个绑定到第一个显示所选组件的项目。后一个列表视图应该有一个用于任何项目的组合框以更改查找项,但我无法绑定它。
这是xaml
<ListView x:Name="list" ItemsSource="Binding Components">
......
</LIstView>
后者
<ListView ItemsSource="Binding Items" DataContext="Binding SelectedItem, ElementName=list">
....
<GridViewColumn Width="140">
<GridViewColumnHeader Tag="Publisher" Content="Item" />
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<ComboBox SelectedItem="Binding Path=Item" ItemsSource="Binding RelativeSource=RelativeSource FindAncestor, AncestorType=x:Type local:ViewModel, Path=LookupItems, Mode=TwoWay " DisplayMemberPath="Name" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
我无法填充组合框。 Wpf 给了我错误
System.Windows.Data Error: 4 : Cannot find source for binding with
reference 'RelativeSource FindAncestor, AncestorType='Projectname.ViewModels.ViewModel', AncestorLevel='1''. BindingExpression:Path=LookupItems; DataItem=null; target element is 'ComboBox' (Name=''); target property is 'ItemsSource' (type 'IEnumerable')
【问题讨论】:
【参考方案1】:尝试将您的 ViewModel
添加为 DataContext,例如。对于Window
,像这样:
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
或在代码隐藏中:
var viewModel = new ViewModel();
this.DataContext = viewModel;
在 DataTemplate 中这样写:
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<ComboBox ItemsSource="Binding Path=DataContext.LookupItems,
RelativeSource=RelativeSource FindAncestor, AncestorType=x:Type Window,
Mode=TwoWay" ... />
</Grid>
</DataTemplate>
【讨论】:
以上是关于Wpf 主从列表视图绑定的主要内容,如果未能解决你的问题,请参考以下文章