Я пытаюсь создать таблицу DataGrid
со столбцом DatagridComboBoxColumn
, имеющим доступные варианты из перечисления. Текущий код ниже может привязывать только значение перечисления OneWay
из привязки PaletteColors
. Я хочу, чтобы значение перечисления в PaletteColors[x].Type
обновлялось, когда пользователь выбирает значение перечисления из раскрывающегося списка. Как нам обновить xaml для этого?
Table.xaml
<Grid.Resources>
<!--
Resource for displaying enum values
-->
<ObjectDataProvider x:Key="PaletteColorInterfaceTypes"
MethodName="GetValues"
ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="enums:PaletteColorInterfaceType" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Grid.Resources>
<DataGrid
IsReadOnly="False"
ItemsSource="{Binding Path=PaletteColors}"
SelectedItem="{Binding SelectedColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="Location" ItemsSource="{Binding Source={StaticResource PaletteColorInterfaceTypes}, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" SelectedValueBinding="{Binding Path=Type}" Width="*" />
</DataGrid.Columns>
</DataGrid>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftClick">
<i:InvokeCommandAction Command="{Binding ColorSelectedCommand}" />
</i:EventTrigger>
<i:EventTrigger EventName="CellEditEnding">
<command:EventToCommand PassEventArgsToCommand="True" Command="{Binding CellEditedCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
Перечисление
public enum PaletteColorInterfaceType
{
Invalid = 0,
A,
B,
}
PaletteColor.cs
public class PaletteColor : IEquatable<PaletteColor>
{
public PaletteColor(
string name,
PaletteColorInterfaceType type)
{
this.Name = name;
this.Type = type;
}
public string Name { get; set; }
public PaletteColorInterfaceType Type { get; set; }
}
TableViewModel.cs
public SortableObservableCollection<PaletteColor> PaletteColors { get; }
public PaletteColor SelectedColor { get; set; }
PaletteColors
и отображал значения в ячейках. Однако, если я хочу выбрать другое значение из ячейки, новое выбранное значение ячейки не отражается в спискеPaletteColors
. В основном он работает только в режиме OneWay. - person XtremeCold   schedule 08.05.2021SelectedColor
, который я не думал использовать для проверки обновленного значения, когда ячейка обновляется до нового значения перечисления. Вместо этого я думал посмотреть на значения вPaletteColors
. Когда я начал изучатьSelectedColor
, я обнаружил, что выбранный элемент привязан неправильно. Я не вижу, чтобыSelectedColor
имело значение выбранной строки. Вы видите в этом проблему? - person XtremeCold   schedule 10.05.2021GetHashCode()
в классеPaletteColor
был переопределен, как описано в stackoverflow.com/questions/17309915/. Большое спасибо, Марк, за вашу помощь и предложение. - person XtremeCold   schedule 10.05.2021