Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更改数据模板的数据上下文将清除组合框选择_C#_Wpf - Fatal编程技术网

C# 更改数据模板的数据上下文将清除组合框选择

C# 更改数据模板的数据上下文将清除组合框选择,c#,wpf,C#,Wpf,我有一个树状视图,允许用户选择不同的项目。使用将数据类型设置为适当的ViewModel类型的数据模板确定每个项目的显示。DataContext将根据树状视图中的选定项自动设置为相应的ViewModel 问题是: 其中一个DataTemplates有一个绑定到ObservableCollection的组合框,用于获取项目列表,还有一个属性用于获取/设置ViewModel中的SelectedValue 当我选择此类型的一个项目,然后选择同一类型的另一个项目时,组合框显示为空,而不是正确的所选项目。组

我有一个树状视图,允许用户选择不同的项目。使用将数据类型设置为适当的ViewModel类型的数据模板确定每个项目的显示。DataContext将根据树状视图中的选定项自动设置为相应的ViewModel

问题是:

其中一个DataTemplates有一个绑定到ObservableCollection的组合框,用于获取项目列表,还有一个属性用于获取/设置ViewModel中的SelectedValue

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

<ComboBox Margin="1,0" 
    ItemsSource="{Binding ItemsToSelect}" 
    SelectedValue="{Binding SelectedValue}" 
    SelectedValuePath="ValuePath" DisplayMemberPath="DisplayPath"
    IsEnabled="{Binding CanSelectItem}">
</ComboBox>
在写这篇文章的时候,通过查看类似的问题,我找到了一个我还没有找到的有趣属性-
IsSynchronizedWithCurrentItem
。起初,我认为这解决了问题,但遗憾的是,它只是在某种程度上改变了行为

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


有人有什么解决办法吗?

如果我对你的问题理解正确,这里有几件事

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

其次,只有当值本身发生更改时,属性绑定才会更新


看看这个

我想出了一个解决办法,但这并不是我想要的

我将绑定更改为使用
SelectedItem
,而不是
SelectedValue
,因此问题没有出现

我从中得到了这个想法

所以我改变了

SelectedValue="{Binding SelectedValue}" 
到(并重命名了我的ViewModel属性):


更新ViewModel中此属性的使用后,一切正常。

谢谢您的回答。不幸的是,ComboBox.SelectedValue默认情况下根据
SelectedValue="{Binding SelectedValue}" 
SelectedItem="{Binding SelectedItem}"