WPF 4.0数据网格模板柱双向绑定的问题 [英] wpf 4.0 datagrid template column two-way binding problem
问题描述
我使用WPF从4.0 DataGrid中。这有一个包含复选框中TemplateColumn中。复选框的财产器isChecked通过绑定设置。
问题是,即使我明确地指定绑定模式为双向,它只能在一个方向。
我要提的是,同样的code完全在.NET 3.5从WPF工具包数据网格。
请看看的的.xaml和内容的.cs。
由于提前,
罗兰
< Window.Resources>
<的DataTemplate
X:键=IsSelectedColumnTemplate>
<复选框
器isChecked ={绑定路径= IsSelected,模式=双向}
/>
< / DataTemplate中>
< /Window.Resources>
<网格和GT;
<数据网格
X:名称=的数据网格
的AutoGenerateColumns =假
CanUserAddRows =假
CanUserDeleteRows =假
HeadersVisibility =列
的ItemsSource ={结合}
>
< DataGrid.Columns>
< DataGridTemplateColumn
标题=preselected
X:NAME =myIsSelectedColumn
CellTemplate ={StaticResource的IsSelectedColumnTemplate}
CanUserSort =真
SortMemberPath =方向
WIDTH =自动
/>
< /DataGrid.Columns>
< / DataGrid的>
< /网格和GT;
和相关的.cs内容:
公共部分类主窗口:窗口
{
公共主窗口()
{
的InitializeComponent(); 的ObservableCollection<&数据对象GT;数据源=新的ObservableCollection<&数据对象GT;();
DataSource.Add(新数据对象());
DataSource.Add(新数据对象());
dataGrid.ItemsSource =数据源;
}
}公共类数据对象:DependencyObject的
{
公共BOOL IsSelected
{
{返回(布尔)的GetValue(IsSelectedProperty); }
集合{的SetValue(IsSelectedProperty,值); }
} //使用的DependencyProperty作为后备存储IsSelected。这使得动画造型,装订等..
公共静态只读的DependencyProperty IsSelectedProperty =
DependencyProperty.Register(IsSelected的typeof(布尔)的typeof(数据对象),新UIPropertyMetadata(假,OnIsSelectedChanged)); 私有静态无效OnIsSelectedChanged(OBJ的DependencyObject,DependencyPropertyChangedEventArgs E)
{
//没有达到这部分
}
}
您在您的复选框中器isChecked的DataTemplate中绑定设置UpdateSourceTrigger = PropertyChanged的:<复选框
器isChecked ={绑定路径= IsSelected,模式=双向,UpdateSourceTrigger =的PropertyChanged}
/>
I'm using the datagrid from wpf 4.0. This has a TemplateColumn containing a checkbox. The IsChecked property of the checkbox is set via binding.
The problem is that even if I specify the binding mode explicitly to be TwoWay, it works only in one direction.
I have to mention that the same code works perfectly in .net 3.5 with the datagrid from the wpf toolkit.
Please take a look at the .xaml and .cs contents.
Thanks in advance,
Roland
<Window.Resources>
<DataTemplate
x:Key="IsSelectedColumnTemplate">
<CheckBox
IsChecked="{Binding Path=IsSelected, Mode=TwoWay}"
/>
</DataTemplate>
</Window.Resources>
<Grid>
<DataGrid
x:Name="dataGrid"
AutoGenerateColumns="false"
CanUserAddRows="False"
CanUserDeleteRows="False"
HeadersVisibility="Column"
ItemsSource="{Binding}"
>
<DataGrid.Columns>
<DataGridTemplateColumn
Header="Preselected"
x:Name="myIsSelectedColumn"
CellTemplate="{StaticResource IsSelectedColumnTemplate}"
CanUserSort="True"
SortMemberPath="Orientation"
Width="Auto"
/>
</DataGrid.Columns>
</DataGrid>
</Grid>
and the related .cs content:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ObservableCollection<DataObject> DataSource = new ObservableCollection<DataObject>();
DataSource.Add(new DataObject());
DataSource.Add(new DataObject());
dataGrid.ItemsSource = DataSource;
}
}
public class DataObject : DependencyObject
{
public bool IsSelected
{
get { return (bool)GetValue(IsSelectedProperty); }
set { SetValue(IsSelectedProperty, value); }
}
// Using a DependencyProperty as the backing store for IsSelected. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IsSelectedProperty =
DependencyProperty.Register("IsSelected", typeof(bool), typeof(DataObject), new UIPropertyMetadata(false, OnIsSelectedChanged));
private static void OnIsSelectedChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
// this part is not reached
}
}
You set UpdateSourceTrigger=PropertyChanged in your Checkbox IsChecked binding in the datatemplate:
<CheckBox
IsChecked="{Binding Path=IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
这篇关于WPF 4.0数据网格模板柱双向绑定的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!