你可以包裝字符串的值,但可能有更好的方法。
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