Tabbing到组合框(MVVM)时,SelectedValue丢失

时间:2011-09-27 05:02:05

标签: silverlight-4.0 mvvm mvvm-light

我有一个带有CellTemplate / CellEditingTemplate的datagridtemplatecolumn,工作正常,加载后显示以前从模型中选择的选定值。 但问题是,当我'通过列'时,组合框丢失了它的选择值并给我一个空的?

我希望我的代码有问题:

                <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 个答案:

答案 0 :(得分:1)

尝试使用SelectedItem而不是SelectedValue。

为什么使用SelectionChangedTrigger?当你使用TwoWay绑定SelectedItem时,你可以选择你的viewmodel。

您还应该将ItemsSource绑定更改为Mode = OneWay或OneTime。 TwoWay Binding在这里毫无意义。

答案 1 :(得分:0)

通过删除EventTrigger EventName =“SelectionChanged部分来修复它。 触发器用于根据组合框A的选择生成组合框B的项目源。

我用functionhandler

替换了functionallity
     _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;
        }
    }