Я пытаюсь привязать выбранное значение datagridcombobox к значению свойства в объекте expando. Однако я не могу этого сделать. Может быть, кто-нибудь может дать мне некоторое представление о проблеме.Связывание Datagridcombobox с expandoobject
Вот соответствующие биты и Миры кода: XAML DataGrid
<DataGrid x:Name="RXSignalsDataGrid" Grid.Column="1" CanUserReorderColumns="True" CanUserAddRows="False" CanUserResizeColumns="True"
CanUserSortColumns="False" Margin="5" ItemsSource="{Binding CANRXFrameSignals}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Enabled" Binding="{Binding Property_0_Value}" Width="Auto" IsReadOnly="False"/>
<DataGridTextColumn Header="Start Bit" Binding="{Binding Property_2_Value}" Width="Auto" IsReadOnly="False"/>
<DataGridTextColumn Header="Length" Binding="{Binding Property_5_Value}" Width="Auto" IsReadOnly="False"/>
<DataGridCheckBoxColumn Header="Little Endian" Binding="{Binding Property_1_Value}" Width="Auto" IsReadOnly="False"/>
<DataGridCheckBoxColumn Header="Conversion 1 Enabled" Binding="{Binding Property_4_Value}" Width="Auto" IsReadOnly="False"/>
<DataGridTextColumn Header="Conversion 1 Type" Binding="{Binding Property_7_Value}" Width="Auto" IsReadOnly="False"/>
<DataGridComboBoxColumn Header="Conversion 1 Type" Width="Auto" IsReadOnly="False" DisplayMemberPath="Key" SelectedValuePath="Value">
<DataGridComboBoxColumn.ElementStyle>
<Style>
<Setter Property="ComboBox.ItemsSource" Value="{Binding Path=SignalConversionOperators}"/>
<Setter Property="ComboBox.SelectedValue" Value="{Binding Path=CANRXFrameSignals.Property_7_Value}"/>
</Style>
</DataGridComboBoxColumn.ElementStyle>
<DataGridComboBoxColumn.EditingElementStyle>
<Style>
<Setter Property="ComboBox.ItemsSource" Value="{Binding Path=SignalConversionOperators}"/>
<Setter Property="ComboBox.SelectedValue" Value="{Binding Path=CANRXFrameSignals.Property_7_Value}"/>
</Style>
</DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
<DataGridTextColumn Header="Conversion 1 Value" Binding="{Binding Property_8_Value}" Width="Auto" IsReadOnly="False"/>
<DataGridCheckBoxColumn Header="Conversion 2 Enabled" Binding="{Binding Property_3_Value}" Width="Auto" IsReadOnly="False"/>
<DataGridTextColumn Header="Conversion 2 Type" Binding="{Binding Property_6_Value}" Width="Auto" IsReadOnly="False"/>
<DataGridTextColumn Header="Conversion 2 Value" Binding="{Binding Property_9_Value}" Width="Auto" IsReadOnly="False"/>
<DataGridTextColumn Header="Variable" Binding="{Binding Property_10_Value}" Width="Auto" IsReadOnly="False"/>
</DataGrid.Columns>
</DataGrid>
вид Модель:
private ObservableCollection<ExpandoObject> canRXFrameSignals;
private Dictionary<string, uint> signalConversionOperators = new Dictionary<string, uint>(){
{"+",0},
{"-", 1},
{"*", 2},
{"/", 3},
{"AND", 4},
{"OR", 5},
{"XOR", 6},
{"Power", 7},
{"S +", 8},
{"S -", 9},
{"S *", 10},
{"S /", 11},
{">>", 12},
};
public ObservableCollection<ExpandoObject> CANRXFrameSignals
{
get
{
return canRXFrameSignals;
}
private set
{
if (canRXFrameSignals == value)
{
return;
}
canRXFrameSignals = value;
OnPropertyChanged("CANRXFrameSignals");
}
}
public Dictionary<string, uint> SignalConversionOperators
{
get { return signalConversionOperators; }
}
Данные свойства объекта Expando имеет тип UINT. Я получил словарь для привязки к поле со списком, что означает, что я получаю элементы, когда я нажимаю на поле со списком, однако он не связывает числовое значение с ExpandoObject. Однако значения в CheckBoxColumns и TextBoxColumns являются обязательными, поэтому я немного смущен, почему он не связывается в случае с ComboBox.
ошибка, что я получаю:
A first chance exception of type 'System.InvalidOperationException' occurred in System.Core.dll
System.Windows.Data Error: 17 : Cannot get 'CANRXFrameSignals' value (type 'Object') from '' (type 'ExpandoObject'). BindingExpression:Path=CANRXFrameSignals.Property_7_Value; DataItem='ExpandoObject' (HashCode=8435281); target element is 'TextBlockComboBox' (Name=''); target property is 'SelectedValue' (type 'Object') InvalidOperationException:'System.InvalidOperationException: Property path is not valid. 'System.Dynamic.ExpandoObject+MetaExpando' does not have a public property named 'Items'.
at CallSite.Target(Closure , CallSite , Object)
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
at MS.Internal.DynamicPropertyAccessorImpl.GetValue(Object component)
at MS.Internal.Data.PropertyPathWorker.GetValue(Object item, Int32 level)
at MS.Internal.Data.PropertyPathWorker.RawValue(Int32 k)'