gpt4 book ai didi

WPF ComboBox.SelectedValue 为空,但 .SelectedItem 不是; SelectedValuePath 已设置。为什么?

转载 作者:行者123 更新时间:2023-12-04 20:41:23 31 4
gpt4 key购买 nike

调试一个奇怪的 NullRefException 我看到下图:

Double-shot to display .SelectedItem

所以当代码指的是.SelectedValue它崩溃了。

我无法理解 .SelectedItem可以设置,但是.SelectedValue不是。调试器查看器中显示的值是正确的,.SelectedIndex也合适。组合框.ItemsSource设置为 List<DvcTypes>在代码中:

cbAdmDvc.ItemsSource =  J790M.DAL.DvcTypes.GetList( );
.SelectedValuePath在 XAML 中设置:
<ComboBox Name="cbAdmDvc" DisplayMemberPath="sDvcType"
SelectedValuePath="tiDvcType" SelectionChanged="cbAdmDvc_SelectionChanged".. />

下拉部分正确显示 .sDvcType标签稍后。
几乎相同的实现适用于一堆其他过滤组合框(另外 7 个)。
这是在主窗口的 Loaded 事件期间发生的。

最佳答案

到目前为止,我无法解释观察到的行为,但找到了一个相对简单的解决方法:

private void    cbAdmDvc_SelectionChanged( object sender, SelectionChangedEventArgs e )
{
if( cbAdmDvc.SelectedIndex < 0 ) return;

DvcType tiDvc; /// add this temp variable to capture .SelectedValue

if( cbAdmDvc.SelectedValue != null )
tiDvc= (DvcType) cbAdmDvc.SelectedValue;
else
tiDvc= ((DvcTypes) cbAdmDvc.SelectedItem).tiDvcType;

DoSmth( tiDvc ); /// instead of DoSmth( (DvcType)cbAdmDvc.SelectedValue )
}

愚蠢,但它有效,因为 .SelectedItem设置正确。
正如我之前所说,这是唯一一个在几个组合框中遇到这种奇怪现象的组合框。

编辑,2014 年 10 月 21 日 :

在对应用程序逻辑进行了一些更改后,我惊讶地发现我在使用另一个 ComboBox 时遇到了同样的问题。找到了一个潜在的解决方案 combobox-selectedvalue-not-updating-from-binding-source ,但是当我尝试通过 .SelectedItem 设置初始值时而不是 .SelectedValue事情变得更奇怪/更糟。所以我也尝试在这里应用我以前的解决方案,它奏效了!

这是我试图解释观察到的行为:
在代码( CBox.SelectedValue= smth; )中设置初始值会触发 CBox_SelectionChanged事件。出于某种原因,当时正在阅读 .SelectedValue返回 null(好像它还没有准备好),但是阅读 .SelectedItem似乎工作正常!一旦你离开 CBox_SelectionChanged事件代码可以读取 .SelectedValue适本地..

所以,如果你 1 ) 有 _SelectionChanged 的处理程序事件, 2 ) 引用 .SelectedValue在其中,和 3 ) 正在通过 .SelectedValue 设置初始选择代码中的其他地方 - 注意 null并进行防御性编码!哈!! :)

关于WPF ComboBox.SelectedValue 为空,但 .SelectedItem 不是; SelectedValuePath 已设置。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25797951/

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