CollectionView にバインドして、DataGrid にデータを表示しています。バインドは正常に機能しますが、読み取り専用のようです。グリッドのチェックボックスをオンにしてもモデルは更新されません。
削減の不条理:
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 ); }
}
そして、次のようにインスタンス化されます:
List<Item> items = new List<Item>();
items.Add( new Item() );
this._CollectionView = CollectionViewSource.GetDefaultView( items );
xaml では、DataGrid を _CollectionView にバインドし、チェックボックスを IsChecked にバインドするだけです。例外はなく、IsChecked の状態は UI に正しく反映されます。
ただし、チェックボックスをクリックすると、モデルではなく UI のみが更新されます。私は WPF が初めてで、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>