WPF 4.0数据网格模板柱双向绑定的问题 [英] wpf 4.0 datagrid template column two-way binding problem

查看:152
本文介绍了WPF 4.0数据网格模板柱双向绑定的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用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 ={结合}
        >
        < D​​ataGrid.Columns>
            < D​​ataGridTemplateColumn
                标题=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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆