ObservableCollection不反映DataGrid中的更改

时间:2012-02-17 09:28:58

标签: wpf datagrid observablecollection

我已经实现了一个DataGrid:

    <DataGrid 
    x:Name="MyDataGridFilter"
    ItemsSource="{Binding}"
    IsSynchronizedWithCurrentItem="True"
    AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTemplateColumn 
                x:Name="FilterTextCol01">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <TextBox 
                            Grid.Column="0"
                            IsHitTestVisible="True"
                            Text="{Binding Path=FilterTextCol01}" />
                        <CheckBox 
                            Grid.Column="1"
                            x:Name="FilterAktivTextCol01"
                            IsHitTestVisible="True"
                            IsChecked="{Binding Path=FilterAktivTextCol01}"/>
                    </Grid>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

守则中的绑定是这样的:

FilterItemsList = new ObservableCollection<DataGridFilterEntity>();
MyDataGridFilter.DataContext = FilterItemsList;

(它被缩短) FilterItemsList实现为INotifyPropertyChanged clas:

public class DataGridFilterEntity : INotifyPropertyChanged

使用成员FilterTextCol01(当然):

public string FilterTextCol01
    {
        get { return _FilterTextCol01; }
        set
        {
            _FilterTextCol01 = value;
            Changed("FilterTextCol01");
        }
    }

一切正常。当我更改FilterItemsList时,DataGrid会反映这些更改。 但是当我在UI中进行一些更改(在DataGrid中)时,它没有被ObservableCollection(FilterItemsList)反映。

我搜索并尝试了几个小时但没有找到任何解决方案。 有谁知道如何解决这个问题? 谢谢!

2 个答案:

答案 0 :(得分:1)

你需要TwoWay绑定。

例如,

 <TextBox 
                        Grid.Column="0"
                        IsHitTestVisible="True"
                        Text="{Binding Path=FilterTextCol01, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
   <CheckBox 
                        Grid.Column="1"
                        x:Name="FilterAktivTextCol01"
                        IsHitTestVisible="True"
                        IsChecked="{Binding Path=FilterAktivTextCol01, Mode=TwoWay}"/>

答案 1 :(得分:0)

您对GUI进行了哪些更改?您是否正在更新Text的{​​{1}}并查看TextBox

如果是这样,同样的例子适用于我的情况。当我关注文本框或复选框时,我收到了更新的文本并在我的模型中检查了布尔值。