2012-05-18 42 views
0

我正在尝试获取已绑定到CollectionViewSource的datagrid的当前选定项目。但是,看起来好像SelectedItem属性没有正确绑定到我在ViewModel中设置的属性。DataGrid SelectedItem被绑定到错误的DataContext MVVM模式

 <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绑定到我的视图模型的SelectedRow财产。任何帮助,将不胜感激。另外,如果您需要更多关于我的设置的信息,请随时询问。

这里是我的ViewModel财产,以防不时之需:

public DataRow SelectedRow 
    { 
     get 
     { 
      return _selectedRow; 
     } 

     set 
     { 
      _selectedRow = value; 
      OnPropertyChanged("SelectedRow"); 
     } 
    } 

回答

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"); 
    } 
} 

谢谢大家了!

1

更改的DataRow无论你是结合过对象的实际类型称为。

public **Object each row represents in view model** SelectedRow 
{ 
    get 
    { 
     return _selectedRow; 
    } 

    set 
    { 
     _selectedRow = value; 
     OnPropertyChanged("SelectedRow"); 
    } 
} 
0

SelectedRow不是CollectionView的财产。我认为两者都是你的视图模型的属性:

<Grid DataContext="{Binding}"> 
    <DataGrid ItemsSource="{Binding CollectionView}" 
       SelectedItem="{Binding SelectedRow}" /> 
</Grid> 
0

你有SelectedItem在你的绑定,和你的财产的名称是SelectedRow - 确保这些是相同的。

相关问题