Команды привязки Silverlight GridViewComboBoxColumn с MVVM не работают - PullRequest
1 голос
/ 17 декабря 2011

Я пытаюсь запустить команду из GridViewColumn, и RadGridView привязан к моей ViewModel. Приведенный ниже код запускает команду, но когда я выбираю значение в ComboBox, он сразу сохраняет строку, не позволяя мне сначала вносить изменения в другие ячейки. Это происходит независимо от того, есть ли у меня команда, связанная с RADComboBox. Если я уберу команду, все равно произойдет.

XAML:

<telerik:RadGridView x:Name="GV1"
                             ItemsSource="{Binding Path=Material}"
                             AutoGenerateColumns="False"
                             IsReadOnly="{Binding IsGridReadOnly}"
                                          ShowGroupPanel="False" 
                             VerticalAlignment="Top"
                             HorizontalAlignment="Center"
                            RowDetailsVisibilityMode="VisibleWhenSelected">
       <i:Interaction.Triggers>
          <i:EventTrigger EventName="RowEditEnded">
                <cmd:EventToCommand Command="{Binding RowEditEndedCommand}"
                                                  PassEventArgsToCommand="True" />
          </i:EventTrigger>
             <i:EventTrigger EventName="CancelRowEdit">
                <cmd:EventToCommand Command="{Binding CancelEditCommand}" />
             </i:EventTrigger>
          </i:Interaction.Triggers>
<telerik:RadGridView.Columns>
<telerik:GridViewColumn Header="Material Code">
                <telerik:GridViewColumn.CellEditTemplate>
                   <DataTemplate>
                      <telerik:RadComboBox ItemsSource="{Binding DataSource.AllMaterials, Source={StaticResource DCP}}"
                                              DisplayMemberPath="Code"
                                              SelectedValuePath="Code"
                                              SelectedValue="{Binding Path=MaterialCode, Mode=TwoWay}"
                                              IsEnabled="{Binding Path=IsMaterialEditable, Mode=TwoWay}" 
                                              Command="{Binding DataSource.MaterialCodeChangedCommand, Source={StaticResource DCP}}"/>
                   </DataTemplate>
                   </telerik:GridViewColumn.CellEditTemplate>
                <telerik:GridViewColumn.CellTemplate>
                   <DataTemplate>
                      <TextBlock Text="{Binding MaterialCode}" />
                   </DataTemplate>
                </telerik:GridViewColumn.CellTemplate>
             </telerik:GridViewColumn>
    <!--7 Other Columns here-->
</telerik:RadGridView.Columns>
    </telerik:RadGridView>

Код позади

public RelayCommand MaterialCodeChangedCommand { get; private set; }
//IN Constructor
this.MaterialTypeChangedCommand = new RelayCommand(MaterialTypeChange);

private void MaterialCodeChange()
  {
     //Command code here
  }

Когда я вынимаю ComboBox из CellEditTemplate и пытаюсь использовать GridViewComboBox, я не могу понять, как заставить привязку работать, но она не запускает RowEditEnded, просто выбрав раскрывающийся список, часть правильно работает с этим кодом:

<telerik:GridViewComboBoxColumn Header="Material Type" 
                                                  ItemsSource="{Binding DataSource.AllTypeCodes, Source={StaticResource DCP}}"
                                                  SelectedValueMemberPath="Code"
                                                  DataMemberBinding="{Binding Path=MaterialType, Mode=TwoWay}"
                                                  DisplayMemberPath="Display">
                    <i:Interaction.Triggers>
                       <i:EventTrigger EventName="SelectionChanged">
                          <i:InvokeCommandAction Command="{Binding DataSource.MaterialTypeChangedCommand, Source={StaticResource DCP}}"/>
                       </i:EventTrigger>
                    </i:Interaction.Triggers>
                 </telerik:GridViewComboBoxColumn>

Если это неясно, дайте мне знать, что уже поздно, и я могу быть неясным. Спасибо за любую помощь, которую вы можете предложить. Я должен отметить, что RowEditEnded действует так же и для других раскрывающихся списков в моем приложении, а также при настройке в CellEditTemplate. Преобразование в GridViewComboBoxCOlumn решает эту проблему, но затем проблема привязки ...

...