我为 CodeProject 上的一篇文章写了一个快速应用程序(完整的文章在这里。你可以直接从这里下载这个问题的源代码)。
这是一个非常简单的窗口,它有一个带有简单对象的 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
在标签中查看当前。
ComboBox 设置为以下类型的对象:
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 行)。
当我将所选值从 a 更改为 a 时,会发生string
异常int
。为避免混淆,两者都将string
代表要显示的属性。
要重现错误,请注释掉第 79 行。运行演示:
- 选择 SelectedValuePath 组合框(第二个)上前 2 个字符串属性中的任何一个。
- 更改列表框上的选择(您应该会看到相应的
SelectedValue
更改) - 将第二个组合框中的选择更改为 int 属性(这实际上是一个字符串表示形式)。抛出异常并出现错误:“输入字符串的格式不正确”
奇怪的是:如果你重复这些步骤,但首先选择 int 属性,它工作正常。然后更改为字符串,仍然可以正常工作。回到int,抛出异常。
在设置之前将其设置SelectedValuePath
为 null 似乎可以解决问题。有什么建议为什么会抛出异常以及问题是什么?
编辑:这是一个具有更多属性类型的新演示。它还将显示抛出的错误,并跟踪SelectedIndex
:下载新演示。