DataGrid SelectedItem绑定到错误的DataContext MVVM模式

时间:2012-05-18 15:22:00

标签: wpf data-binding binding mvvm

我正在尝试获取已绑定到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");
        }
    }

4 个答案:

答案 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 - 请确保这些内容相同。