Я устанавливаю ObjectDataProvider
для Enum
, как показано ниже
<Window.Resources>
<ObjectDataProvider x:Key="EnumProvider" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="local:Mode"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources >
public enum Mode
{
ModeSlow = 0,
ModeFast = 1,
ModeNeutral = 2,
ModeNone = 3
}
Вот DataGrid
, который отображает значения Enum
как ComboBox
es
<DataGrid x:Name="dataGridView" Grid.Row="0" DataGridCell.Selected="DataGridGotFocus"
ItemsSource="{Binding VariedObjectList, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
AutoGenerateColumns="False" CanUserDeleteRows="true" SelectionMode="Single" CanUserAddRows="True" VerticalScrollBarVisibility="Auto" ScrollViewer.CanContentScroll="True">
<DataGrid.Columns>
<DataGridTemplateColumn Header=" ModeType " >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Source={StaticResource EnumProvider}}"
SelectedItem="{Binding Path= ModeType, UpdateSourceTrigger=LostFocus, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!-- Other columns ---->
</DataGrid.Columns>
</DataGrid>
При ModeType, равном Enum
, при вводе новой строки по умолчанию я хочу, чтобы она отображала «ModeSlow», но она пуста. Кроме того, если я обновляю одну строку, все предыдущие строки также обновляются с последним значением. Иногда, если я обновляюсь до ModeFast
, он автоматически меняется на ModeSlow
. Его поведение непредсказуемо. Что мне здесь не хватает ?. Пожалуйста, гид.
public class VariedObject : INotifyPropertyChanged
{
private Mode modeType = Mode.ModeSlow;
public Mode ModeType
{
get { return modeType ; }
set
{
modeType = value;
OnPropertyChanged("ModeType");
}
}
private int val;
public int Value {
get { return val; }
set
{
val = value;
OnPropertyChanged("Value");
SetValueRangeList();
}
}
public List<strings> ValueRange { get; set; }
public string SelectedValueRange {get; set;}
}
в моем xaml.cs. (Извините, я допустил опечатку, на самом деле я привязываюсь к VariedObjectList, который является списком VariedObject)
private List<VariedObject> variedObjectList = List<VariedObject>();
public List<VariedObject> VariedObjectList {
get { return variedObjectList ; }
set
{
variedObjectList = value;
OnPropertyChanged("VariedObjectList ");
}
}