我有一個DataGrid,列中顯示的值並不總是正確更新。DataGrid項目不在ObservableCollection上更新
這裏的定義是:
<uic:DataGridControlEx Grid.Row="1"
ReadOnly="True"
Name="m_dgErgaenzungsfelder"
NavigationBehavior ="RowOnly"
SelectionMode="Extended"
AutoCreateColumns="False"
ItemsSource="{Binding Path=ErgaenzungsfelderEntities}"
SelectionChanged="OnDGSelectionChanged" >
<uic:DataGridControlEx.View>
<xc:TableView ColumnStretchMode="Last"
AllowColumnChooser="False"
VerticalGridLineThickness="0"
UseDefaultHeadersFooters="False"
ShowRowSelectorPane="False">
<xc:TableView.FixedHeaders>
<DataTemplate>
<xc:ColumnManagerRow/>
</DataTemplate>
</xc:TableView.FixedHeaders>
<xc:TableView.Theme>
<xc:Office2007SilverTheme />
</xc:TableView.Theme>
</xc:TableView>
</uic:DataGridControlEx.View>
<uic:DataGridControlEx.Columns>
<xc:Column Title="{LocText FGG1:ErgaenzungsfelderResources:ErgaenzungsfelderViewColumnName}"
FieldName="Name" />
<xc:Column Title="{LocText FGG1:ErgaenzungsfelderResources:ErgaenzungsfelderViewColumnType}"
FieldName="ErgaenzungsfeldType" >
<xc:Column.CellContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=., Converter={x:Static converters:ErgaenzungsfeldTypeTotextConverter.Instance}}" />
</DataTemplate>
</xc:Column.CellContentTemplate>
</xc:Column>
<xc:Column Title="{LocText FGG1:ErgaenzungsfelderResources:ErgaenzungsfelderViewColumnAuthor}"
FieldName="Author" />
<xc:Column Title="{LocText FGG1:ErgaenzungsfelderResources:ErgaenzungsfelderViewColumnCreationDate}"
FieldName="CreationDate" />
</uic:DataGridControlEx.Columns>
</uic:DataGridControlEx>
DataGridControlEx
exentds的Xceed DataGridControl但不影響綁定。
而且隨着ObservableCollection
電網結合的定義後面的代碼,構造早期初始化的收集和更新項目的方法:
public ObservableCollection<ErgaenzungsfeldEntity> ErgaenzungsfelderEntities { get; private set; }
public ErgaenzungsfelderView() {
ErgaenzungsfelderEntities = new ObservableCollection<ErgaenzungsfeldEntity>();
InitializeComponent();
}
public void ShowErgaenzungsfelder(List<ErgaenzungsfeldEntity> entities) {
ErgaenzungsfelderEntities.Clear();
entities.ForEach(e => ErgaenzungsfelderEntities.Add(e));
//m_dgErgaenzungsfelder.GetBindingExpression(ItemsControl.ItemsSourceProperty).UpdateSource();
}
ErgaenzungsfeldEntity實現INotifyPropertyChanged
並沒有通知的每一個變化屬性更改例如:
public string Name {
get { return m_name; }
set {
m_name = value;
NotifyPropertyChanged("Name");
}
}
當通過GUI更新綁定項目時,所做的更改始終會被正確反映。通過GUI,項目不會使用上述ShowErgaenzungsfelder
重新加載,但綁定項目將作爲參考傳遞。
期: 我們的服務層可以通知需要重新加載元素的事件。這將叫ShowErgaenzungsfelder
。當這樣做時,添加的實體將出現在網格中,被刪除的實體將被刪除。但是,修改的實體不會反映字段Name和ErgaenzungsfeldType(這是唯一可以更改的屬性)的更改。
例如更改列排序將觸發更新網格並顯示正確的值。
對於`ItemsSource時,我試圖改變所有這些特性都沒有成功:
ItemsSource="{Binding Path=ErgaenzungsfelderEntities, UpdateSourceTrigger=Explicit, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True, Mode=OneWay}"
隨着
- UpdateSourceTrigger =在
ShowErgaenzungsfelder
明確和取消註釋m_dgErgaenzungsfelder.GetBindingExpression(ItemsControl.ItemsSourceProperty).UpdateSource();
- UpdateSourceTrigger =的PropertyChanged
- UpdateSourceTrigger =默認
我很感激任何輸入。
Does'nt「explicit」關鍵字告訴你自己更新你的數據源?你嘗試沒有屬性'UpdateSourceTrigger'? – 2014-09-11 08:02:00
是的,那是我在PropertyChanged沒有觸發更新之後的最後一次嘗試,但它對'ItemsControl.ItemsSourceProperty'(這是正確的嗎?)不起作用 – Philippe 2014-09-11 08:04:05