Ast*_*tor 5 wpf combobox .net-4.0
调试一个奇怪的NullRefException我看到如下图:

所以当代码引用.SelectedValue它崩溃时.
我无法理解如何.SelectedItem设置,但.SelectedValue不能.调试器查看器中显示的值是正确的,.SelectedIndex也是合适的.ComboBox .ItemsSource设置为List<DvcTypes>代码:
cbAdmDvc.ItemsSource = J790M.DAL.DvcTypes.GetList( );
Run Code Online (Sandbox Code Playgroud)
.SelectedValuePath 在XAML中设置:
<ComboBox Name="cbAdmDvc" DisplayMemberPath="sDvcType"
SelectedValuePath="tiDvcType" SelectionChanged="cbAdmDvc_SelectionChanged".. />
Run Code Online (Sandbox Code Playgroud)
下拉部分.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 )
}
Run Code Online (Sandbox Code Playgroud)
愚蠢,但它有效,因为.SelectedItem设置正确。
正如我之前所说,这是几个 ComboBox 中唯一遇到这种奇怪情况的 ComboBox。
编辑,2014 年 10 月 21 日:
在对应用程序逻辑进行一些更改后,我惊讶地发现自己在另一个 ComboBox 中遇到了同样的问题。找到了一个潜在的解决方案组合框选择值不更新从绑定源,但是当我尝试通过而不是设置初始值时,.SelectedItem事情.SelectedValue变得更奇怪/更糟糕。所以我也尝试在这里应用我以前的解决方案并且它有效!
这是我尝试解释观察到的行为:在代码 ( )
中设置初始值会触发事件。由于某种原因,此时读取返回 null(好像还没有准备好),但是读取似乎工作正常!一旦退出事件代码就可以正确读取。CBox.SelectedValue= smth;CBox_SelectionChanged.SelectedValue.SelectedItemCBox_SelectionChanged.SelectedValue
因此,如果您1)有一个事件处理程序_SelectionChanged,2.SelectedValue )在其中引用,并且3)通过代码中的其他位置设置初始选择.SelectedValue- 请注意null并进行防御性编码!呵呵!!:)
| 归档时间: |
|
| 查看次数: |
4659 次 |
| 最近记录: |