除了引导我找到解决方案的当前答案之外,我实际需要完成的是在 itemsSources (复数)之间切换时检索最后一个选定的项目
从我发现的一篇文章中:
“对于每个 ItemsSource 绑定,都会生成一个唯一的 CollectionView ..”
我同意,只要视图存在,每个绑定都会生成自己的 CollectionView 并因此持有对 CurrentItem 和 CurrentPosition 的引用,如果用
IsSynchronizedWithCurrentItem="True"
所以我创建了自己的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 中没有任何杂乱代码的情况下检索他们最后选择的项目,希望这会有所帮助,享受吧。