定义一个数据绑定的datagrid,用来呈现数据,其中第二列是模板列,要求可以双向绑定
checkbox
<DataGrid x:Name="dataGrid" Grid.Row="0" ItemsSource="{Binding}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="AA" Binding="{Binding AA,Mode=TwoWay}" />
<DataGridTemplateColumn Header="BB">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding BB, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>绑定的数据源ObservableCollection<class1> bindingData = new ObservableCollection<class1>();public class class1
{
public string AA{get;set;}
public bool BB { get; set; }
}
public void InitDataBinding()
{
class1 a = new class1();
a.AA = "aaaaa";
a.BB = true; bindingData.Add(a);
}//绑定,初始化
dataGrid.ItemsSource = bindingData;wpf双向绑定
这个帖子问的同样问题?
你的实体类需要实现INotifyPropertyChanged 接口
绑定的msdn你需要仔细阅读以下 呵呵
然后BB的set方法里面抛事件出来public class TestObject : INotifyPropertyChanged
{
private bool _bb;
public bool BB{ get { return this._bb; } set { this._bb= value; OnPropertyChanged("BB"); } }
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
这个貌似不行吧,如果没有使用datagrid模板列,怎么样都可以,如果使用了,貌似ui的数据更新不到数据源的,双向绑定的格式是mode = twoway;默认也是这样的方式,不知道为什么不行,
这个貌似不行吧,如果没有使用datagrid模板列,怎么样都可以,如果使用了,貌似ui的数据更新不到数据源的,双向绑定的格式是mode = twoway;默认也是这样的方式,不知道为什么不行,
模板列也是一样的 楼主自己慢慢试试吧
这个貌似不行吧,如果没有使用datagrid模板列,怎么样都可以,如果使用了,貌似ui的数据更新不到数据源的,双向绑定的格式是mode = twoway;默认也是这样的方式,不知道为什么不行,
模板列也是一样的 楼主自己慢慢试试吧
这个真心不行,第一列是可以的,没有使用模板列那个.
我试过了,情况是这样的:
第一列修改,可以;
两列都修改,可以;
只第二列修改,不可以;
<StackPanel>
<TextBlock x:Name="ShowBBValue" Text="{Binding BB}" />
<DataGrid x:Name="dataGrid" Grid.Row="0" ItemsSource="{Binding}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="AA" Binding="{Binding AA,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
<DataGridTemplateColumn Header="BB">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding BB, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</StackPanel>public partial class MainWindow : Window
{
class1 a = new class1();
ObservableCollection<class1> bindingData = new ObservableCollection<class1>();
public MainWindow()
{
InitializeComponent();
InitDataBinding();
} void InitDataBinding()
{
a.AA = "aaaaa";
a.BB = true;
bindingData.Add(a);
ShowBBValue.DataContext = this.a;
dataGrid.ItemsSource = bindingData;
} }
public class class1 : INotifyPropertyChanged
{
private bool _bb;
private string _aa; public string AA
{
get { return _aa; }
set { this._aa= value; OnPropertyChanged("AA"); }
}
public bool BB
{
get { return this._bb; }
set
{
this._bb= value;
OnPropertyChanged("BB");
}
}
public event PropertyChangedEventHandler PropertyChanged;
void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
直接给你写了个例子 你看看吧
知道我错在哪里了,我没有写上这句,UpdateSourceTrigger=PropertyChanged
不写这句貌似就不可以ui到源更新,呵呵,还是理解不深刻啊...