2012-05-18 40 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 - 確保這些是相同的。