Вот такая ситуация: у меня есть список объектов, каждый из которых ссылается на идентификационный номер. Я пытаюсь установить значение в столбце ListView на основе идентификационного номера объекта:Связывание - динамический выбор данных для столбца ListView
<ListView Name="Listview1"
Itemsource="{Binding ObjectList}">
<ListView.View>
<GridView>
<GridViewColumn Header="Header1" DisplayMemberBinding="{Binding subObject.property}"/>
<GridViewColumn Header="Header2" DisplayMemberBinding="{Binding PropertyOfAnItemInAList"/>
</GridView>
</ListView.View>
</ListView>
ObjectList это свойство в ViewModel, и доказывает ObservableCollection к ListView для обработки. Заголовки Header1 и Header2 привязаны к свойствам внутри элементов, найденных в ObservableCollection, которые называются ObjectList.
Все это отлично работает для Header1. Проблема заключается в том, что Header2 должен выбрать один элемент из списка, находящегося внутри каждого элемента ObservableCollection, и отобразить его на основе другого свойства ссылочных элементов в ObjectList.
Так как мне это сделать?
мне удалось получить его работу, установив переменную внутри объектов в ObjectList называется «currentSelection», которая затем устанавливается, когда связывание перебирает ObjectList от ItemSource для получения ListView:
public ObservableCollection<theObject> ObjectList {
get {
foreach (theObject obj in sourceCollection) {
obj.CurrentID = MyID;
}
return new ObservableCollection<theObject>sourceCollection // <-- secondary question: Is this the best way to send an observableCollection to a View???
}
}
Однако это похоже на хак, а не на лучшую практику, так что есть другой, лучший способ сделать то же самое?
EDIT:
Вот отрывок из объектов внутри ObjectList, как у меня сейчас.
public class ObjectInObjectList {
/* constructor and various properties snipped to save space */
private subObject subObj;
public int CurrentID {get; set;}
public SubObject {
get { return subObject; } // etc...
}
private SortedList<int,int> valuesIWantInSecondColumn
Public int PropertyOfAnItemInAList {
return valuesIWantInSecondColumn[currentID];
}
Я не уверен, что я понимаю ваш вопрос. Вы просто ищете лучший способ получить MyID в столбце с заголовком Header1? –
Я перечитал это и теперь думаю, что вы пытаетесь связать столбец «Header2» с разными свойствами в зависимости от того, какой элемент выбран в другом элементе управления, и вы сделали это, используя другое свойство с оператором switch (CurrentID), который возвращает определенное свойство в зависимости от по делу. Это точно? Можете ли вы показать соответствующий код для объекта? –
Ли - это очень правильно. Я добавлю соответствующий код в редактирование вопроса. –