0

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

我知道数据网格的 SelectedItem 属性正在尝试绑定到 CollectionViewSource,但我不太确定如何告诉 SelectedItem 绑定到我的 ViewModel 的 SelectedRow 属性。任何帮助,将不胜感激。另外,如果您需要有关我的设置的更多信息,请随时询问。

这是我的 ViewModel 中的属性,以防万一:

    public DataRow SelectedRow
    {
        get
        {
            return _selectedRow;
        }

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

4 回答 4

1

将 DataRow 更改为您要绑定的任何实际对象类型。

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

    set
    {
        _selectedRow = value;
        OnPropertyChanged("SelectedRow");
    }
}
于 2012-05-18T15:24:45.627 回答
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");
    }
}

谢谢大家!

于 2012-05-21T14:12:38.217 回答
0

SelectedRow不是 的属性CollectionView。我假设两者都是您的 ViewModel 的属性:

<Grid DataContext="{Binding}">
    <DataGrid ItemsSource="{Binding CollectionView}"
              SelectedItem="{Binding SelectedRow}" />
</Grid>
于 2012-05-18T16:53:41.397 回答
0

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

于 2012-05-18T16:57:29.620 回答