gpt4 book ai didi

c# - 更改数据模板的数据上下文会清除组合框选择

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:36 25 4
gpt4 key购买 nike

我有一个允许用户选择不同项目的 TreeView。每个项目的显示是使用数据模板确定的,其中 DataType 设置为适当的 ViewModel 类型。 DataContext 会根据 TreeView 中的所选项目自动设置为适当的 ViewModel。

问题是:

其中一个 DataTemplates 有一个 ComboBox 绑定(bind)到 ObservableCollection 以获取项目列表和一个属性以获取/设置 ViewModel 中的 SelectedValue。

当我选择一个这种类型的项目,然后选择另一个相同类型的项目时,ComboBox 显示空白而不是正确的选择项目。似乎组合框在转换到新项目后立即将 SelectedValue 属性设置为 NULL,然后就不再更新了。

<ComboBox Margin="1,0" 
ItemsSource="{Binding ItemsToSelect}"
SelectedValue="{Binding SelectedValue}"
SelectedValuePath="ValuePath" DisplayMemberPath="DisplayPath"
IsEnabled="{Binding CanSelectItem}">
</ComboBox>

真正奇怪的是,如果我在选择相同类型的项目之间选择不同类型的项目,它总是正确显示。

我尝试忽略 SelectedValue setter 中的 NULL 值,但不管我是否也引发了 PropertyChanged 事件,这都不起作用。

private MyObject selectedValue;
public MyObject SelectedValue
{
get
{
return selectedValue;
}
set
{
if (value != null)
{
this.selectedValue = value;
}
this.OnPropertyChanged("SelectedValue");
}
}

在撰写本文时查看类似的问题使我想到了一个我尚未发现的有趣属性 - IsSynchronizedWithCurrentItem 来自 question .起初,我认为这解决了问题,但遗憾的是它只是稍微改变了行为。

将此属性设置为 True 后,组合不会完全清除其选择,而只是将第一项标记为已选择。因此,现在将 SelectedValue 属性设置为列表中的第一项,而不是设置为 NULL

有人对解决方案有任何想法吗?

最佳答案

如果我正确理解您的问题,那么这里会发生一些事情。

首先,您没有在绑定(bind)中设置 Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}

其次,属性绑定(bind)只有在值本身发生变化时才会更新。

检查一下 Data Binding

关于c# - 更改数据模板的数据上下文会清除组合框选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9826989/

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