C# Windows通用应用程序:选择带有GridView和分组数据源的EdItem
我有一个应用程序,用户必须选择一种颜色。主题颜色或自定义颜色。因为它们有不同的值,所以我有一个接口IColor和一个自定义颜色(ValueColor)的实现,如下所示:C# Windows通用应用程序:选择带有GridView和分组数据源的EdItem,c#,xaml,uwp,C#,Xaml,Uwp,我有一个应用程序,用户必须选择一种颜色。主题颜色或自定义颜色。因为它们有不同的值,所以我有一个接口IColor和一个自定义颜色(ValueColor)的实现,如下所示: public sealed class ValueColor : INodeColor, IEquatable<ValueColor> { private readonly int color; public override bool Equals(object obj) {
public sealed class ValueColor : INodeColor, IEquatable<ValueColor>
{
private readonly int color;
public override bool Equals(object obj)
{
return Equals(obj as ValueColor);
}
public bool Equals(INodeColor other)
{
return Equals(other as ValueColor);
}
public bool Equals(ValueColor other)
{
return other != null && other.color == color;
}
public override int GetHashCode()
{
return color.GetHashCode();
}
}
当启用分组时,GridView返回到引用比较,当我确保每种颜色只有一个引用时,一切正常。我可以在这个场景中缓存它,但我还有另一个不可能的情况
这是错误还是设计造成的?当您分组时,可能会覆盖布尔等于(对象obj),obj并不总是一个ValueColor,而是一个组对象?我看到了,看到了“as”操作符。我不知道这是否是设计造成的,但我一直认为是。为什么使用引用等式如此困难?毕竟,如果您执行
GroupedList.SelectedItem=newvaluecolor(16)代码>,假设列表中有一个值为16的ValueColor,对吗?你怎么知道的?只需将SelectedItem设置为已经存在的,因为这会使一切变得更加复杂。我有几个这样的场景,有很多数据。当我不想以内存泄漏结束时,我必须考虑缓存上下文。当这样的环境发生变化时,我还需要再次填写我的列表等等。我不明白为什么你需要一个“缓存”,或者如果你有一个,为什么它的生命周期很难管理。你的数据源就是你需要的所有“缓存”,不是吗?如果您有一个单独的集合,它的生存期可以链接到gridview的生存期。为什么这么复杂?
public class Group
{
public List<INodeColor> Items { get; set; }
public string Name { get; set; }
}
// Works:
GroupedList.SelectedItem = Groups[0].Items[5]; // = new ValueColor(16);
// Works not:
GroupedList.SelectedItem = new ValueColor(16);