我在UserControl1中有一个UserControl1和另一个UserControl2。 在User Control2中,我有一个列表视图。
我从DB获取DataSet,我想用listview绑定“MyTable”。所以我做了如下所示 背后的代码。
UserControl1.UserControl2.lstview.ItemsSource = DataSet.Tables["MyTable"].DefaultView;
上述方法正在运行。但问题是,在一列中有一个复选框作为单元格模板。
<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方式的问题。所以我做了如下所示。但是,如下所示,我在列表视图中没有显示数据!!!
这里可能出现什么问题???
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;
}
注意:这里没有MVVM
答案 0 :(得分:0)
DataRow没有实现INotifyPropertyChanged,因此当您更改属性时,UI将不会得到通知。
用户DataRowView:
http://msdn.microsoft.com/en-us/library/system.data.datarowview%28v=vs.100%29.aspx
修改强>
foreach (DataRowView tempRowView in myDataTable.DefaultView)
{
...
}
myDataTable.DefaultView中的项目可以直接转换为DataRowView。