gpt4 book ai didi

c# - Caliburn 在 ComboBox 上重置 SelectedIndex

转载 作者:行者123 更新时间:2023-12-03 10:26:26 26 4
gpt4 key购买 nike

我有一个 ComboBox 是它的 ItemsSource绑定(bind)到我的 ViewModel 中的项目列表以及 SelectedItem被绑定(bind)到一个属性。我还有另一个绑定(bind)到另一个列表的 ComboBox,但它使用 SelectedIndex反而。当我从第一个 ComboBox 中选择一个项目时,它会更改秒 ComboBox 的内容,并且属性绑定(bind)到 SelectedIndex设置为 -1 ,这会导致在 ComboBox 中未选择任何内容。

为什么是SelectedIndex属性重置为-1,我该怎么做才能防止它?

查看

<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding MySelectedItem}"></ComboBox>
<ComboBox ItemsSource="{Binding MyArray}" SelectedIndex="{Binding MySelectedIndex}"></ComboBox>

查看型号
public List<Foo> MyList { get; set; }
private Foo _mySelectedItem;
public Foo MySelectedItem {
get { return _mySelectedItem; }
set {
if (Equals(value, _mySelectedItem)) return;
_mySelectedItem = value;
NotifyOfPropertyChange();
MyArray = new [] { "othervalue1", "othervalue2", "othervalue3" };
NotifyOfPropertychange(() => MyArray);
}
}
public string[] MyArray { get; set; }
public int MySelectedIndex { get; set; }

public MyViewModel() {
MyList = new List<Foo> { new Foo(), new Foo(), new Foo() };
MySelectedItem = MyList.First();

MyArray = new [] { "value1", "value2", "value3" };
MySelectedIndex = 1; // "value2"

NotifyOfPropertyChange(() => MyList);
}

因此,从绑定(bind)到 MyList 的 ComboBox 中选择某些内容会导致 MyArray 使用新值构建。这会导致 MySelectedIndex 突然具有值 -1 ,即使新数组中存在相同的索引。

最佳答案

SelectedItem确实被重置了,因为当 ItemsSource属性设置为新的项目集合。

但是您应该能够将索引存储在临时变量中并在 ItemsSource 之后重新分配它已经更新:

public Foo MySelectedItem
{
get { return _mySelectedItem; }
set
{
if (Equals(value, _mySelectedItem)) return;
_mySelectedItem = value;
NotifyOfPropertyChange();
int temp = MySelectedIndex;
MyArray = new[] { "othervalue1", "othervalue2", "othervalue3" };
NotifyOfPropertychange(() => MyArray);

SelectedIndex = temp;
NotifyOfPropertychange(() => SelectedIndex);
}
}

关于c# - Caliburn 在 ComboBox 上重置 SelectedIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43072257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com