gpt4 book ai didi

c# - 绑定(bind)到通用属性

转载 作者:行者123 更新时间:2023-11-30 15:00:16 24 4
gpt4 key购买 nike

我正在尝试将 ListBox 绑定(bind)到我的 ViewModel 中的属性。我想要做的是能够随时将该属性换出到另一个具有相同字段的列表。所以现在我有这个:

public List<City> Cities
{
get { return GetCities(); }
}

当我使用通常的方式绑定(bind)它时

ItemsSource="{Binding Cities}"

它工作正常。我还有另一个名为 Rivers 的密封类和相同的公共(public)属性(名称)。

public List<River> Rivers
{
get { return GetRivers(); }
}

它们都有一个共同的属性“名称”,即列表框显示的内容。在河流、城市和其他类别之间交换的最佳方式是什么?从理论上讲,我想要一个通用的 List 属性,它可以绑定(bind)到 Rivers 或 Cities 等并将其值设置为 Rivers 或 Cities 等。但我认为不可能创建一个通用的 List 属性。所有类都是密封的,我无法修改它们。

有什么建议吗?谢谢

最佳答案

如果您不能更改原始类,您最好创建两个 adapter River 和 City 的类,每个类都实现一个带有 Name 属性的公共(public)接口(interface)。

这样你就可以只使用一个列表来表示它们中的每一个,并随意在两者之间交换。

例如

public interface INamed
{
string Name { get; }
}

public class RiverAdapter : INamed
{
private River _river;
public string Name { get { return _river.Name; } }
}
public class CityAdapter : INamed
{
private River _city;
public string Name { get { return _city.Name; } }
}

因此您的列表声明将变为:

public IEnumerable<INamed> Items { get; set; }

关于c# - 绑定(bind)到通用属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15623666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com