2013-10-30 30 views
1

我有UserControl1和UserControl1中的另一個UserControl2。 在用戶控件2中,我有一個列表視圖。複選框綁定不工作在WPF ListView單元格模板

我從數據庫中獲取數據集,並且想要將「MyTable」與listview綁定。所以我做了如下所示的 後面的代碼。

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反射。即,複選框未被選中或未被選中。

所以也許這可能是沒有將綁定模式設置爲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

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的。

+0

感謝您的回覆。但如何從ListView項目源獲取DataRowView?它僅僅是DataView? – user2017793

+0

我爲你編輯了我的答案。 –

相關問題