2014-09-30 3 views
0

Я пытаюсь привязать выбранное значение 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)' 

ответ

0

Так eventyaly нашел эту проблему сам. Подобное описано в этом посте: Binding ItemsSource of a ComboBoxColumn in WPF DataGrid

Основной ловушкой, что хотя контекст данных ItemsSource связывания получает перемешалось в datagridcombobox SelectedValueBinding до сих пор хранит контекст данных по умолчанию, который был установлен в DataGrid ItemsSource, таким образом, вместо того, указав полный путь к вашей коллекции, когда необходимо создать ярлык SelectedValueСледующий относительный путь в исходном ItemsSource для datagrid.

Смежные вопросы