I have a datagridtemplatecolumn with CellTemplate / CellEditingTemplate, works ok, after loading it shows the previously choosen selectedvalue bound from the model. But the problem is that when I 'tab' through the columns the combobox loses it's selectedvalue and gives me an empty one?
I hope there's something wrong with my code:
<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">
开发者_Go百科 <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>
Kind regards,
Mike
try using SelectedItem instead of SelectedValue.
Why do you use a SelectionChangedTrigger? when you bind the SelectedItem with TwoWay you get the selection to your viewmodel.
you should also changed the ItemsSource Binding to Mode=OneWay or OneTime. TwoWay Binding makes no sense here.
Fixed it by removing the EventTrigger EventName="SelectionChanged part. The trigger was for generating the itemsource for combobox B based on the selection of combobox A.
I replaced the functionallity with an eventhandler
_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;
}
}
精彩评论