你可以包装字符串的值,但可能有更好的方法。
public class WrappedValue<T> : INotifyPropertyChanged where T : IEquatable<T>
{
private T _value;
public T Value
{
get { return _value; }
set
{
if (_value == null || !_value.Equals(value))
{
_value = value;
OnPropertyChanged("Value");
}
}
}
public WrappedValue() { }
public WrappedValue(T value)
{
Value = value;
}
public static implicit operator T(WrappedValue<T> a)
{
return a.Value;
}
public static implicit operator WrappedValue<T>(T a)
{
return new WrappedValue<T>(a);
}
private void OnPropertyChanged(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
通过隐式转换的初始代码甚至不会有太大变化:
ObservableCollection<WrappedValue<string>> myList = new ObservableCollection<WrappedValue<string>>();
myList.Add("A");
myList.Add("B");
myComboBox.ItemsSource = myList;
但是你应该设置Value属性完全如果您的编辑它不能取代对象:
myList[0].Value = "C";
另请注意,使用字符串集合的控件与选择总是有问题,因为如果有重复的值相同的对象将被引用,选择将去干草线(虽然ListBoxes比ComboBoxes更多)
我也想到了这样的解决方案,但我希望会有更好的。但是,感谢这个解决方案。在其他情况下,该课程似乎也很有帮助。 – SpeziFish 2011-05-02 08:42:32
刚刚添加了一个注释,为什么使用字符串集合不是一个好主意,即使这种未选择没有发生。 – 2011-05-02 08:43:56
我添加了ToString() - 覆盖你的代码并试用了它。但是现在组合框不再更新这些值了!? – SpeziFish 2011-05-02 09:16:16