自定义 ObservableCollection 具有附加函数
本文关键字:函数 ObservableCollection string 自定义 | 更新日期: 2023-09-27 18:31:16
我想创建一个自定义ObservableCollection<string>
以在WPF中与MVVM一起使用。我的实际目标是通过两个属性(返回所选索引和所选项)以及检查给定字符串是否在集合中的方法扩展标准ObservableCollection<string>
。它目前看起来像这样:
public class MyStringCollection : ObservableCollection<string>
{
private int _selectedIndex;
private ObservableCollection<string> _strings;
public MyStringCollection() : base()
{
_selectedIndex = 0;
_strings = new ObservableCollection<string>();
}
/// <summary>
/// Index selected by the user
/// </summary>
public int SelectedIndex
{
get { return _selectedIndex; }
set { _selectedIndex = value; }
}
/// <summary>
/// Item selected by the user
/// </summary>
public string Selected
{
get { return _strings[SelectedIndex]; }
}
/// <summary>
/// Check if MyStringCollection contains the specified string
/// </summary>
/// <param name="str">The specified string to check</param>
/// <returns></returns>
public bool Contains(string str)
{
return (_strings.Any(c => (String.Compare(str, c) == 0)));
}
}
即使MyStringCollection
继承自ObservableCollection<string>
,标准方法,如Add
、Clear
等,也不起作用。当然,这是因为每次创建 MyStringCollection 的实例时,我都会创建一个单独的实例_strings
。
我的问题是如何在不手动添加这些功能的情况下向ObservableCollection<string>()
添加/清除元素?
> 您是从ObservableCollection<T>
派生的this
因此它是对您的集合的引用。您所需要的只是
public string Selected
{
get { return this[SelectedIndex]; }
}
和
public bool Contains(string str)
{
return (this.Any(c => (String.Compare(str, c) == 0)));
}
请注意,Contains()
已作为扩展方法存在。
我不确定您要实现的目标,但您不应该从ObservableCollection<string>
继承,更喜欢组合而不是继承。实际上你已经差不多完成了(你已经有一个private ObservableCollection<string> _strings
成员了)。
例如:更喜欢组合而不是继承?
回到最初的要求,如果你正在执行 MVVM,很可能你想要同时公开一个ObservableCollection<T> MyObjects
属性和一个T MySelectedObject
属性。