2011-05-26 54 views
3

这里的情景:如何防止datagrid刷新数据?

  • 两个工具包数据网格,并排侧
  • 电网A是只读的,不能更改
  • 电网B的内容是可以改变的,并使用保存在它之下按钮进行保存

我需要网格A保持不变,直到用户单击保存按钮,而不管网格B可能会或可能不会有任何更改。当我绑定到下面的属性时,当网格B发生更改时,两个网格都会更改。我想避免这种情况。

这样做的最佳方法是什么?两个网格目前都绑定到以下属性:

public EntitySet<SomeEntity> SomeEntities 
    { 
     get { return _entity; } 
     set 
     { 
      if (_entity != value) 
      { 
       _entity= value; 
       OnPropertyChanged("SomePropertyChanged"); 
      } 
     } 
    } 
+0

@Akash - 请参阅我的答案。 – 2011-06-07 16:42:42

回答

0

通过使用带有OneTime绑定的DataGridTemplateColumn来实现它的工作。例如,

<sdk:DataGridTemplateColumn> 
    <sdk:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Enabled, Mode=OneTime}"></TextBlock> 
     </DataTemplate> 
    </sdk:DataGridTemplateColumn.CellTemplate> 
</sdk:DataGridTemplateColumn> 
2

将网格A的绑定设置为OneTime。

Text="{Binding Path=Age, Mode=OneTime}" 
+0

我很欣赏这种回应。我试过这个,但它有同样的问题。 OneTime在数据上下文发生变化时首次加载**和**时将数据从源发送到目标。我想这意味着我的数据上下文正在改变? – 2011-05-27 12:55:01

+0

你是如何设定上下文的? – 2011-05-27 14:29:10

+0

在我的视图模型的构造函数中:context = new SomeContext(); – 2011-05-27 15:02:53

2

也许而不是完全切换出SomeEntities的集合,所述网格被结合,也许使用一个ObservableCollection,然后在每个项目的基础上以更新的ObservableCollection。然后使用Derek提到的Mode = OneTime。

0

您可以创建两个EntitySets,每个DataGrid一个。保存后,您必须更新绑定到只读DataGrid的设置。