我想在Silverlight中实现一个键控的可观察集合,它将根据名为Name的属性存储唯一对象。一种方法是使用ObservableCollectionEx(另一个stackoverflow post中的样本)类,该类订阅包含的elemens上的所有PropertyChanged事件,并检查name属性是否更改。更好的是,创建我自己的事件,告诉我name属性已更改,如果item已存在则抛出ValidationException。我不一定想用索引器[Name]来检索对象。
这样的事情:
private string name;
public string Name
{
get { return name; }
set {
if (value != name)
{
OnNameChanged();
name = value;
OnPropertyChanged("Name");
}
}
}
还有其他解决方案更优雅吗?更简单? 谢谢, 阿德里安
P.S。我知道还有一个ObpableDictionary,Wpf博士放在一起,很容易将它移到Silvelight,但我不知道如何将它与DataForm等一起使用。
答案 0 :(得分:2)
如果我理解正确,您需要使用propertychanged实现创建KeyValuePair并将其与ObservableCollection一起使用
ObservableCollection< KeyValuePair<string,string>>
public class KeyValuePair<TKey, TValue> : INotifyPropertyChanged
{
public KeyValuePair(TKey key, TValue value)
{
_key = key;
_value = value;
}
public TKey Key { get { return _key; } }
public TValue Value { get { return _value; }
set
{
_value = value;
NotifyPropertyChanged("Value");
}
}
private TKey _key;
private TValue _value;
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
答案 1 :(得分:1)
ObservableDictionary(Of TKey, TValue) - VB.NET
一般功能列表: