我正在尝试解决我的另一个问题(此处),但我被困在更改SelectedValuePath
in 代码的内部问题上。
似乎根据我的改变,不同的事情会发生。我研究了 SO,对其进行了调试,甚至尝试使用 dotPeek 在 MS dll 中找到有问题的代码,但到目前为止无济于事。
如果我从任何类型的属性更改为字符串属性,它可以正常工作。
从 string 更改为 int 将引发异常。
从 bool 更改为 int 取决于:
- 如果属性为 false,则所选索引将更改为 0,所选值将更改为 false(不是 int,因为它应该是)
- 如果该属性为 true,则所选索引将更改为 -1,并且所选值将为 null。
我的假设是某个地方有人试图解析某些东西,并且根据发生的情况,结果可能会或可能不会起作用。
由于SelectedValuePath
接收字符串作为输入,并将其设置SelectedValue
为它们指向的任何内容。我希望在更改此设置SelectedItem
时不会更改,并且会显示正确的值。我没想到会得到无数不同的结果/异常/行为......
唯一想到的是,类型SelectedValue
设置为指向的任何属性,SelectedValuePath
然后当它更改时,它可能会遇到错误的类型......
作为一种解决方法,SelectedValuePath
在将其设置为新属性之前将其设置为 null 似乎有效(避免引发任何异常)。
编辑:
我已经用更多类型更新了项目,你可以在这里找到它。有问题的位在 Try/Catch 块中,每当发生奇怪的事情时都会显示额外的信息。
问题1:令我困惑的行为是:从字符串更改为任何其他类型(一旦您选择了一个项目),将引发异常,并且SelectedValue
不会再更改(将其设置为默认值将解决此问题)。
为什么被System.FormatException: Input string was not in a correct format
抛出,改变了什么?(我曾期望将SelectedValuePath
willsimply “重置”SelectedValue
为新对象/类型)
此外,SelectedValuePath
在大多数情况下,更改 会将 SelectedIndex 重置为 -1 或 0。
问题 2:为什么索引会更改?