DataGridにいくつかのデータを表示し、CollectionViewにバインドします。バインディングは正常に動作しますが、読み取り専用のようです:グリッド内のチェックボックスをオンにしてもモデルは更新されません。WPF ICollectionView双方向バインディング?
削減広告absurdum:背後
public class Item
{
public bool IsChecked
{
get
{
return _isChecked;
}
set
{
// Not hit when clicking on checkbox
_isChecked = value;
}
}
private bool _isChecked;
}
コード、私のコレクションビューは、依存関係プロパティです:
private static DependencyProperty __CollectionViewProperty = DependencyProperty.Register
(
"_CollectionView",
typeof(ICollectionView),
typeof(MyClass),
new PropertyMetadata(null)
);
private ICollectionView _CollectionView
{
get { return (ICollectionView)GetValue(__CollectionViewProperty); }
set { SetValue(__CollectionViewProperty, value); }
}
そして、このようにインスタンス化される:XAMLで
List<Item> items = new List<Item>();
items.Add(new Item());
this._CollectionView = CollectionViewSource.GetDefaultView(items);
、私は単にDataGridを_CollectionViewにバインドし、チェックボックスをIsCheckedにバインドします。例外はなく、IsCheckedの状態はUIに正しく反映されています。
ただし、チェックボックスをクリックすると、モデルではなくUIが更新されます。私はWPFを初めて使っています.Cocoaから来ています.CocoaはNSArrayControllerであり、バインディングはそのままの状態で双方向で動作します。私は何が欠けていますか?
編集:XMLコード:
<DataGrid Grid.Row="1" ItemsSource="{ Binding _CollectionView}" AutoGenerateColumns="False" GridLinesVisibility="None"
RowHeight="60" ScrollViewer.VerticalScrollBarVisibility="Hidden" ScrollViewer.HorizontalScrollBarVisibility="Hidden"
CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="True" IsSynchronizedWithCurrentItem="True"
x:Name="_DataGrid">
<DataGrid.Columns>
<DataGridTemplateColumn Header="" Width="90" CanUserSort="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked}" Click="CheckBox_Click" HorizontalAlignment="Left"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGrid.Columns>
</DataGrid>
はい、私はそれを試みましたが、チェックボックスをクリックするとセッターが呼び出されません... – Gregzo
xamlをコピーできますか? – MohamedHamza
が追加されました。クリックイベントも監視されていて、うまくいきました。 – Gregzo