2012-02-17 32 views
1

我已经实现了一个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类:

public class DataGridFilterEntity : INotifyPropertyChanged 

与成员Fil terTextCol01(当然):

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

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

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

+0

@AngelWPF对不起,直到昨天我不知道接受的使用情况等等。我要去弥补它! – manton 2012-02-17 09:48:53

+0

@AngelWPF请让我知道,如果有任何其他不正确的我的个人资料!我还没有回答问题,因为目前我的知识很差。但那会改变... – manton 2012-02-17 09:56:41

+0

nopes ...它的罚款。但让我知道你在GUI中做了哪些改变? – 2012-02-17 10:00:19

回答

1

您需要双向绑定。

例如,

<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}"/> 
+0

我不认为这需要明确设置'TwoWay'绑定。默认情况下,CheckBox和TextBox的IsChecked和Text属性是双向绑定的。同时'UpdateSourceTrigger = PropertyChanged'可能会使GUI变慢。 – 2012-02-17 09:54:51

+0

@ Pongsthon.keng谢谢! UpdateSourceTrigger = PropertyChanged是我的解决方案。我不知道。 – manton 2012-02-17 09:58:58

+0

那么这意味着您想要在文本框中输入文本时更新数据?不是当你关注文本框? – 2012-02-17 10:01:43

0

什么样的变化,你做的GUI?您是否更新TextBoxText并检查CheckBox

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