SelectedValue теряется при добавлении в комбинированный список (MVVM) - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть столбец таблицы данных с CellTemplate / CellEditingTemplate, работает нормально, после загрузки он показывает ранее выбранное выбранное значение, связанное с моделью.Но проблема в том, что когда я «нажимаю» на столбцы, выпадающий список теряет выбранное значение и дает мне пустое значение?

Надеюсь, что-то не так с моим кодом:

                <data:DataGridTemplateColumn x:Name="colPosId" Width="80">
                            <data:DataGridTemplateColumn.HeaderStyle>
                                <Style TargetType="dataprimitives:DataGridColumnHeader">
                            <Setter Property="HorizontalContentAlignment" Value="Center"/>
                            <Setter Property="ContentTemplate">
                                        <Setter.Value>
                                            <DataTemplate>
                                        <TextBlock Text="{Binding Resource.lblPosId, Source={StaticResource CustomLocStrings}}" Style="{StaticResource ColumnHeaderTextBoxStyleCentered}"/>
                                            </DataTemplate>
                                        </Setter.Value>
                                    </Setter>
                                </Style>
                            </data:DataGridTemplateColumn.HeaderStyle>
                            <data:DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                            <TextBlock Text="{Binding Model.posid}" Style="{StaticResource ColumnTextBoxStyleCentered}" />
                                </DataTemplate>
                            </data:DataGridTemplateColumn.CellTemplate>
                    <data:DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate>
                            <ComboBox 
                                    Height="23" HorizontalAlignment="Left" 
                                    x:Name="cmbPositions" VerticalAlignment="Top" Width="100" ItemsSource="{Binding PositionVM.Positions, Mode=TwoWay}" SelectedValue="{Binding Model.posid, Mode=TwoWay}"   
                                    DisplayMemberPath="Model.name" SelectedValuePath="Model.posid">
                                <i:Interaction.Triggers>
                                    <i:EventTrigger EventName="SelectionChanged">
                                        <cmd:EventToCommand Command="{Binding MainScore.SelectionPosChangedCommand, Mode=OneWay, Source={StaticResource Locator}}" CommandParameter="{Binding SelectedValue, ElementName=cmbPositions}"/>
                                    </i:EventTrigger>
                                </i:Interaction.Triggers>
                            </ComboBox>
                        </DataTemplate>
                    </data:DataGridTemplateColumn.CellEditingTemplate>
                </data:DataGridTemplateColumn>

ВидС уважением,

Майк

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

попробуйте использовать SelectedItem вместо SelectedValue.

Почему вы используете SelectionChangedTrigger?когда вы связываете SelectedItem с TwoWay, вы получаете выбор для вашей модели представления.

, вам также следует изменить привязку ItemsSource на Mode = OneWay или OneTime.Двухстороннее связывание здесь не имеет смысла.

0 голосов
/ 02 октября 2011

Исправлено, удалив EventTrigger EventName = "SelectionChanged part. Триггер был для генерации источника элементов для комбинированного списка B на основе выбора комбинированного списка A.

Я заменил функцию все функции обработчиком событий

     _selectedScore.Model.PropertyChanged += SelectedScore_PropertyChanged;

    public void SelectedScore_PropertyChanged(object sender, PropertyChangedEventArgs  e)
    {
        if (e.PropertyName =="posid" )
        {
            this.UpdateFilteredRules(SelectedScore.Model.posid); 

        }
        if (e.PropertyName == "playerid")
        {
            this.SelectedScore.Model.posid = this.SelectedScore.PlayerVM.GetPosId(SelectedScore.Model.playerid).Model.posid;
        }
    }
...