我試圖將自定義類綁定到來自c#的WPF DataGrid的itemssource成員。我實施了IList,但由於某種原因,我無法讓列表顯示任何成員。將自定義數據結構綁定到WPF中的DataGrid ItemsSource
我通過調用
dataGridObject.ItemsSource = switchHolderObject
這裏設置在C#ItemsSource屬性是我價值的定義:
public class AssetHolder<T> : Dictionary<string,T>, IList<T>, INotifyCollectionChanged, INotifyPropertyChanged where T : Asset
{
... // lots of code here
new public IEnumerator<T> GetEnumerator()
{
var enumerator = base.GetEnumerator();
while (enumerator.MoveNext())
{
var pair = enumerator.Current;
yield return pair.Value;
}
}
}
public class NonGenericAssetHolder : AssetHolder<Asset> {}
public class SwitchHolder : NonGenericAssetHolder {}
的原因我這裏有三個類是避開的事實C#中的字典不是協變的。
我已驗證所有實施的IList方法工作正常,並且列表確實展開並具有適當的數據,但DataGrid仍顯示沒有成員。奇怪的是,它的作品,當我加入這個方法的AssetHolder類:
public List<T> Hack()
{
List<T> result = new List<T>();
foreach (T asset in this)
{
result.Add(asset);
}
return result;
}
不斷重新綁定像這樣的DataGrid:
SwitchGrid.ItemsSource = _tempLocation.Switches.Hack();
然而,這造成了巨大的性能損失,我覺得它應該像現在這樣。任何人都知道發生了什麼事?爲什麼DataGrid不顯示我的數據?
你實現了GetEnumerator()嗎?你在使用它嗎?注意:我總是將'ItemsControl'的'DataContext'設置爲代碼隱藏,並將Xaml中的ItemsSource設置爲'ItemsSource =「{Binding}」''這樣你就可以更改BindingErrors輸出窗口,因此您可以更好地診斷出現問題。 – Silvermind 2012-03-17 00:49:05
我想,它依賴於地方,你在哪裏填寫AssetHolder類中的數據。你必須把它填入構造函數中,以這種方式使用它。或者,您可以將ItemsSource綁定到Hack方法,但您應該使用AssetHolder作爲返回類型,IMO:public AssetHolder Hack(){return this; } –
JiKra
2012-03-17 01:37:19
@Silvermind Dictionary實現了IEnumerable,所以我只是修改了GetEnumerator函數以僅返回值。我已經確認它可以正常工作,並將其添加到我的帖子中。 – hypehuman 2012-03-17 13:02:27