我想在ItemsSource
ComboBox
属性时设置默认选定值
我的xaml:
<ComboBox ItemsSource="{Binding SelectedItemsSource, Mode=OneWay}" x:Name="c1">
<i:Interaction.Triggers>
<ei:PropertyChangedTrigger Binding="{Binding ItemsSource,RelativeSource={RelativeSource Self}}">
<ei:ChangePropertyAction PropertyName="SelectedIndex" Value="{StaticResource zero}" TargetName="c1"/>
</ei:PropertyChangedTrigger>
</i:Interaction.Triggers>
</ComboBox>
我的VM中的SelectedItemsSource动态变化,我希望每次发生时都选择第一个项目。
知道为什么这不起作用?
答案 0 :(得分:2)
尝试为你的组合框设置属性IsSynchronizedWithCurrentItem到true
并完全删除触发器 -
<ComboBox ItemsSource="{Binding SelectedItemsSource, Mode=OneWay}"
IsSynchronizedWithCurrentItem="True">
</ComboBox>
答案 1 :(得分:1)
尝试更改绑定:
<ei:PropertyChangedTrigger Binding="{Binding ItemsSource,RelativeSource={RelativeSource Self}}">
到
<ei:PropertyChangedTrigger Binding="{Binding ItemsSource,ElementName=c1}">
答案 2 :(得分:1)
除了当前的答案之外,还引导我前往我的解决方案 我真正需要完成的是在何时检索最后选择的项目 在itemsSources(复数)之间切换
从我发现的一篇文章中: "for each ItemsSource binding, a unique CollectionView is generated.."
我同意,只要视图存在,每个绑定都会生成自己的CollectionView 因此,如果用
修饰,则保留对CurrentItem和CurrentPosition的引用<强> IsSynchronizedWithCurrentItem = “真”强>
所以我创建了自己的 ChangePropertyAction 类:
public class RetriveLastSelectedIndexChangePropertyAction : ChangePropertyAction
{
public int LastSelectedIndex
{
get { return (int)GetValue(LastSelectedIndexProperty); }
set { SetValue(LastSelectedIndexProperty, value); }
}
public static readonly DependencyProperty LastSelectedIndexProperty =
DependencyProperty.Register("LastSelectedIndex", typeof(int), typeof(RetriveLastSelectedIndexChangePropertyAction), new UIPropertyMetadata(-1));
protected override void Invoke(object parameter)
{
var comboBox = this.AssociatedObject as ComboBox;
this.SetValue(LastSelectedIndexProperty, comboBox.Items.CurrentPosition);
}
}
并使用 PropertyChangedTrigger 调用它,如下所示:
<ComboBox ItemsSource="{Binding SelectedItemsSource, Mode=OneWay}"
x:Name="c1"
IsSynchronizedWithCurrentItem="True">
<i:Interaction.Triggers>
<ei:PropertyChangedTrigger Binding="{Binding ElementName=c1,Path=ItemsSource}">
<local:RetriveLastSelectedIndexChangePropertyAction
PropertyName="SelectedIndex"
Value="{Binding LastSelectedIndex}"
TargetName="c1"/>
</ei:PropertyChangedTrigger>
</i:Interaction.Triggers>
</ComboBox>
希望这有助于任何一个人需要检索他们最后选择的项目,而不是任何凌乱 在他们的DataContext中编码,享受。