我为CodeProject上的文章写了一个快速应用程序(完整文章here。您可以直接从here下载此问题的源代码)。更改列表框SelectedValuePath引发异常
这是一个非常简单的窗口,它具有带简单对象的ListBox(3个属性:2个字符串,1个int)。
public class MyShape
{
public string ShapeType { get; set; }
public string ShapeColor { get; set; }
public int ShapeSides { get; set; }
}
我设置SelectedValuePath
在后面的代码,以便用户可以选择从组合框的属性,并查看当前的SelectedValue
的标签。
组合框被设置为类型的对象:
public class PropertyObject
{
public string PropertyName { get; set; }
public string PropertyType { get; set; }
}
这两个属性是字符串,所以,应该是作为SelectedValuePath
输入有效。
我设置值是这样的:
private void ShapeClassPropertiesCmbx_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBox cmbx = (ComboBox)sender;
PropertyObject prop_ob = ((PropertyObject)cmbx.SelectedItem);
string name = prop_ob.PropertyName;
var item_index = SourceListBox.SelectedIndex;
//SourceListBox.SelectedValuePath = null; // without this, we get a null exceptions when going from string to int properties for some reason.
SourceListBox.SelectedValuePath = name;
SourceListBox.SelectedIndex = item_index;
}
(如果你下载的代码,它是在MainWindow.xaml.cs线79)。
当我将所选值从string
更改为int
时,会发生异常。 为了避免混淆,两者都会以string
表示要显示的财产。
重现错误,注释掉行79运行演示:
- 选择任意的组合框SelectedValuePath(注:第二个)第2个属性。
- 更改列表框中的选择(您应该看到
SelectedValue
相应地发生变化) - 将第二个组合框中的选择更改为int属性(实际上是一个字符串表示形式)。 抛出异常与错误:“输入字符串的不正确的格式”
奇怪的是:如果你重复这些步骤,但首先选择整型属性,它工作正常。改为一个字符串,然后,仍然正常工作。回到int,引发异常。
在设置之前将SelectedValuePath
设置为null似乎可以解决问题。任何建议为什么你的例外被抛出,这有什么问题?
编辑: 下面是一个新的演示,其中包含更多属性类型。它还将显示抛出什么错误,并跟踪SelectedIndex
:Download new demo。
如果我注释掉第78行,'item_index'不再被定义。我是否应该评论第81行?啊,我明白了。你的意思是第79行。再试一次.... – ouflak
Argh,我的代码似乎不同步。好吧,第79行。这是我在上面的课程中注释掉的那个(它没有在演示中注释掉,因为它会崩溃)。我也会更新这个问题。 – Noctis
当你把所有的事情都包下来的时候,看到你最后的项目会很有趣! – ouflak