私の解決策に向かう途中の現在の回答に加えて、私が実際に達成する必要があるのは、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に厄介なコードがなくても、最後に選択したアイテムを取得する必要がある場合に、これが役立つことを願っています。お楽しみください。