UserControl1 に UserControl1 と別の UserControl2 があります。User Control2 には、リストビューがあります。
DB から DataSet を取得しており、「MyTable」をリストビューにバインドしたいと考えています。だから私はコードビハインドで以下に示すようにしました。
UserControl1.UserControl2.lstview.ItemsSource = DataSet.Tables["MyTable"].DefaultView;
上記の方法は有効です。しかし問題は、1 つの列にセル テンプレートとしてチェックボックスがあることです。
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding isok, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="20" Height="15" />
</DataTemplate>
</GridViewColumn.CellTemplate>
[isok は MyTable のビット型カラム]
しかし、コードを使用して isok 列を更新すると、UI に反映されません。つまり、チェックボックスがチェックされていないか、チェックされていません。
そのため、Binding Mode を 2 way に設定していないことが問題である可能性があります。ということで、下図のようにしました。しかし、以下のようにしたとき、リストビューにデータが表示されません!!!
ここで何が問題になる可能性がありますか???
Binding b = new Binding("DataSet.Tables");
b.Source = DataSet.Tables["MyTable"].DefaultView;
b.Mode = BindingMode.TwoWay;
UserControl1.UserControl2.lstview.SetBinding(ListView.ItemsSourceProperty, b);
以下に示すように、列の値を更新しています
DataView dv = (DataView)lstview.ItemsSource;
foreach (DataRow dr in dv.Rows)
{
dr["isok"] = isselected;
}
NB:ここではMVVMはありません