我有一个带绑定的PivotControl。一切运作良好,直到我添加一个具有相同标题的枢轴两个枢轴,让我们称它们为C和C',以及A和B两个不同的枢轴,按此命令:AC'BC。现在,当我尝试从B到C时,一切都很好。但是当我从A到C时,它会做出奇怪的事情:不移动,移动标题但不移动内容......很奇怪。
我调试了PivotControl中的SelectionChanged事件,它甚至是最奇怪的。它被称为两次:第一次,从C到另一个枢轴的转换,然后是另一个包含从A到C的正确转换的调用。
我已经尝试了一切。数据绑定是一个结构列表,如下所示:
struct Resource
{
public someenum Type;
public string Data;
public string Identifier { get {...} set {...} }
public UserToken User;
}
数据透视表的标题由IValueConverter设置,它接受字符串Identifier(它是Type,Data和User的函数)作为参数。我改变它以使标题总是不同,但它仍然不起作用。例如,当Type和Data相同时会出现错误,尽管Identifier和User不同。
我为资源编写了运算符==和!=,也为UserToken编写了运算符。他们的行为应该如此,但仍然会做出这种奇怪的过渡。
答案 0 :(得分:1)
说明显而易见:给他们不同的名字。
如果它们不同,你应该给它们不同的名字。只需用计数器修改名称即可。
修改强>
来自MSDN:
Name是极少数依赖属性之一 动画(IsAnimationProhibited在元数据中为true),因为名称 本身对于定位动画至关重要。绑定名称的数据是 技术上可行,但是一个非常罕见的情况,因为a 数据绑定名称无法满足主要用途 property:为代码隐藏提供标识符连接点。
答案 1 :(得分:0)
刚刚找到答案。经过大量的谷歌搜索,我注意到GetHashCode可能在这个混乱中有所作为。我在结构中修改了getHashCode的定义,瞧!它运作顺利:)
只是一个提示:获得一个好的GetHashCode函数返回函数的volatile参数的XOR。在我的例子中,代码是这样的:
Type.GetHashCode() ^ Data.GetHashCode() ^ User.GetHashCode();