열에 표시된 값이 항상 올바르게 업데이트되지 않는 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
이 Xceed DataGridControl을 exentds하지만 바인딩에 영향을주지 않습니다
다음은 정의입니다.
그리고 그리드가 결합하는 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
을 사용하여 다시로드되지 않지만 바인딩 된 항목은 참조로 전달됩니다.
문제 : Google 서비스 레이어는 요소를 다시로드해야하는 이벤트를 알릴 수 있습니다. 전화는 ShowErgaenzungsfelder
입니다. 이렇게하면 추가 된 항목이 그리드에 표시되고 제거 된 항목은 제거됩니다. 그러나 수정 된 엔티티는 Name 및 ErgaenzungsfeldType 필드 (변경 가능한 유일한 속성)에 대한 변경 사항을 반영하지 않습니다.
예. 열 정렬을 변경하면 눈금을 업데이트하고 올바른 값을 표시합니다.
ItemsSource="{Binding Path=ErgaenzungsfelderEntities, UpdateSourceTrigger=Explicit, NotifyOnTargetUpdated=True, NotifyOnSourceUpdated=True, Mode=OneWay}"
명시하고 ShowErgaenzungsfelder
에 m_dgErgaenzungsfelder.GetBindingExpression(ItemsControl.ItemsSourceProperty).UpdateSource();
을 해제 주석
- UpdateSourceTrigger =와
- UpdateSourceTrigger =하여 PropertyChanged 다음`ItemsSource, 내가 성공하지 않고 모든 속성을 변경하려고했습니다 들어
- UpdateSourceTrigger = 기본값
모든 입력에 대해 감사드립니다.
"explicit"키워드는 데이터 소스를 직접 업데이트하라는 메시지를 표시합니까? 당신은 'UpdateSourceTrigger' 속성없이 시도 했습니까? –
예, PropertyChanged가 업데이트를 트리거하지 않았지만 마지막 시도 였지만'ItemsControl.ItemsSourceProperty'에 대해 작동하지 않았습니다. (올바른 것입니까?) – Philippe