0

CollectionViewSource にバインドしたデータグリッドの現在選択されている項目を取得しようとしています。ただし、ViewModel で設定したプロパティに SelectedItem プロパティが正しくバインドされていないように見えます。

      <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 内のプロパティを DataRow ではなく DataRowView に変更します

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 に答える