解釋一下我的情況下,一個對象的屬性,讓我們考慮一個簡單的對象是這樣的:無法綁定到實現ICollection的<T>
public class FixedSeries : Series
{
int val1, val2;
public FixedSeries(int val1, int val2) { this.val1 = val1; this.val2 = val2; }
public int Diff
{
get { return val2 - val1; }
set { val2 = val1 + value; }
}
}
然後,如果在我的形式我要綁定Diff
到控件的值I可以這樣做:
BindingSource source;
FixedSeries fixedSeries;
public Form1()
{
InitializeComponent();
fixedSeries = new FixedSeries(2, 5);
source = new BindingSource();
source.DataSource = fixedSeries;
numericUpDown1.DataBindings.Add(new System.Windows.Forms.Binding("Value", source, "Diff", false, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged));
}
但是,如果我FixedSeries
從更一般的Series
獲得(在這裏看到下文)實現了ICollection<int>
界面我得到一個ArgumentException
「不能綁定到DataSource上的屬性或列Diff
「。
public class FixedSeries : Series
{
public FixedSeries(int val1, int val2)
{
base.Add(val1);
base.Add(val2);
}
public int Diff
{
get { return base[1] - base[0]; }
set { base[1] = base[0] + value; }
}
}
public interface ISeries : ICollection<int>
{
int this[int index] { get; }
}
public class Series : ISeries
{
List<int> vals = new List<int>();
public int this[int index]
{
get { return vals[index]; }
internal set { vals[index] = value; }
}
public void Add(int item) { vals.Add(item); }
public void Clear() { vals.Clear(); }
public bool Contains(int item) { return vals.Contains(item); }
public void CopyTo(int[] array, int arrayIndex) { vals.CopyTo(array, arrayIndex); }
public int Count { get { return vals.Count; } }
public bool IsReadOnly { get { return false; } }
public bool Remove(int item) { return vals.Remove(item); }
public IEnumerator<int> GetEnumerator() { return vals.GetEnumerator(); }
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return vals.GetEnumerator(); }
}
我想這事做與ICollection<T>
接口,也許到.NET預計綁定到裏面的物品的事實。我怎樣才能在這種情況下綁定到Diff
屬性而不刪除綁定到系列內部項目的可能性?
以我提供的簡化示例爲例,所有解決方案都可以工作。如果我拿我的原始文件解決方案(A)失敗。也許還有其他一些缺陷,但現在沒時間去搜索它,只是想告訴可能感興趣的人 –