Мне нужно отображать в XamDataGrid
данные, поступающие из класса, который содержит несколько свойств и список допустимых вариантов из одного из них. Что-то вроде:
public class DataViewModel
{
public string Identifier {get;private set;}
public string Value {get;set;}
public IEnumeranble<string> ValidValues {get; set;}
}
Я пытаюсь установить настройку XamDataGrid
чтобы у меня был не редактируемый столбец Identifier
столбец Value
редактируемый с помощью XamComboEditor
. Это xaml, к которому я подошел:
<igDP:XamDataGrid GroupByAreaLocation="None">
<igDP:XamDataGrid.FieldLayoutSettings>
<igDP:FieldLayoutSettings AutoGenerateFields="False"/>
</igDP:XamDataGrid.FieldLayoutSettings>
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout>
<igDP:FieldLayout.Fields>
<igDP:Field Name="Identifier"/>
<igDP:Field Name="Value">
<igDP:Field.Settings>
<igDP:FieldSettings EditorType="{x:Type igEditors:XamComboEditor}">
<igDP:FieldSettings.EditorStyle>
<Style TargetType="{x:Type igEditors:XamComboEditor}">
<Setter Property="IsEditable" Value="False" />
<Setter Property="ItemsSource" Value="{Binding Path=DataContext.DataItem.Values,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type igEditors:XamComboEditor}}}" />
</Style>
</igDP:FieldSettings.EditorStyle>
</igDP:FieldSettings>
</igDP:Field.Settings>
</igDP:Field>
</igDP:FieldLayout.Fields>
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
Связывание данных в XamDataGrid
отлично работает, но одно на XamComboEditor.ItemsSource
не работает, но я не уверен, как я могу исправить id. Есть ли у вас какие-либо идеи?
Я нашел альтернативный способ сделать это с помощью событий.
В XAML мне нужно было указать эти настройки вместо того, что у меня было:
<igDP:FieldSettings EditorType="{x:Type igEditors:XamComboEditor}">
<igDP:FieldSettings.EditorStyle>
<Style TargetType="{x:Type igEditors:XamComboEditor}">
<Style.Setters>
<EventSetter Event="Loaded" Handler="XCEloaded"/>
<Setter Property="IsEditable" Value="False" />
</Style.Setters>
</Style>
</igDP:FieldSettings.EditorStyle>
</igDP:FieldSettings>
И я обработал событие с помощью этого фрагмента кода:
private void XCEloaded(object sender, RoutedEventArgs e)
{
var drp = Utilities.GetAncestorFromType(sender as DependencyObject, typeof(DataRecordPresenter), true) as DataRecordPresenter;
if (drp.DataRecord.DataItem != null)
(sender as XamComboEditor).ItemsSource = (drp.DataRecord.DataItem as DataViewModel).ValidValues;
}
Это не похоже на самое чистое решение, но по крайней мере оно работает.