我正在尝试获取已绑定到CollectionViewSource的数据网格的当前所选项。但是,似乎SelectedItem属性未正确绑定到我在ViewModel中设置的属性。
<Grid DataContext="{Binding CollectionView}">
<DataGrid ItemsSource="{Binding}" Margin="0,30,0,0" SelectedItem="{Binding SelectedRow}" />
</Grid>
运行项目时,我在VS2010的输出框中看到此错误消息。
System.Windows.Data Error: 40 : BindingExpression path error: 'SelectedRow' property not found on 'object' ''BindingListCollectionView' (HashCode=56718381)'. BindingExpression:Path=SelectedRow; DataItem='BindingListCollectionView' (HashCode=56718381); target element is 'DataGrid' (Name=''); target property is 'SelectedItem' (type 'Object')
我知道datagrid的SelectedItem属性正在尝试绑定到CollectionViewSource,但我不太清楚如何告诉SelectedItem绑定到我的ViewModel的SelectedRow属性。任何帮助,将不胜感激。此外,如果您需要有关我的设置的更多信息,请随时询问。
以下是我的ViewModel中的属性,以防万一:
public DataRow SelectedRow
{
get
{
return _selectedRow;
}
set
{
_selectedRow = value;
OnPropertyChanged("SelectedRow");
}
}
答案 0 :(得分:1)
将DataRow更改为您要绑定的实际对象类型。
public **Object each row represents in view model** SelectedRow
{
get
{
return _selectedRow;
}
set
{
_selectedRow = value;
OnPropertyChanged("SelectedRow");
}
}
答案 1 :(得分:1)
我做了一些挖掘工作,并且能够找到解决方案。基本上,我需要告诉SelectedItem属性回顾MainWindow的DataContext。
我将XAML更改为:
<Grid DataContext="{Binding CollectionView}">
<DataGrid ItemsSource="{Binding}" Margin="0,30,0,0" SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.SelectedRow}">
</DataGrid>
</Grid>
然后将我的ViewModel中的属性更改为DataRowView而不是DataRow
public DataRowView SelectedRow
{
get
{
return _selectedRow;
}
set
{
_selectedRow = value;
OnPropertyChanged("SelectedRow");
}
}
谢谢大家!
答案 2 :(得分:0)
SelectedRow
不是CollectionView
的属性。我假设它们都是ViewModel的属性:
<Grid DataContext="{Binding}">
<DataGrid ItemsSource="{Binding CollectionView}"
SelectedItem="{Binding SelectedRow}" />
</Grid>
答案 3 :(得分:0)
您的约束中有SelectedItem
,并且您的媒体资源名称为SelectedRow
- 请确保这些内容相同。