Я пытаюсь связать пользовательский класс с элементом itemssource в WPF DataGrid из c #. Я реализовал IList, но по какой-то причине я не могу получить список, чтобы показать каких-либо участников.
Я устанавливаю свойство ItemsSource в C #, вызывая
dataGridObject.ItemsSource = switchHolderObject
Вот определение моей стоимости:
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 не показывает мои данные?