#c# #wpf #xaml #datagrid #ivalueconverter
#c# #wpf #xaml #datagrid #ivalueconverter
Вопрос:
У меня есть DataGrid
столбец, определенный следующим образом:
<DataGrid ItemsSource="{Binding Events}" SelectionMode="Single" SelectionUnit="FullRow">
<DataGrid.Columns>
<DataGridTextColumn Header="Unit" Width="Auto" Binding="{Binding UnitId}"/>
...
</DataGrid.Columns>
</DataGrid>
Проблема в том, что я привязан к списку, у Events
которых есть только UnitId
свойство. Я не хочу отображать UnitId
. Я хотел бы отобразить Description
из Unit.My ViewModel содержит IList<Unit>
, который выглядит следующим образом:
public class Unit
{
public int UnitId {get;set;}
public string Description { get;set;}
}
Но ViewModel не является datacontext DataGrid, поэтому мне пришлось бы проделать некоторые махинации с RelativeSource.
Итак, например, если бы у меня был элемент с UnitId
значением 1 и Description
«Верхней папкой», я бы хотел, чтобы в ячейке отображалось «Верхняя папка»
Я думаю, что смогу использовать IValueConverter
для чего-то подобного, но не уверен, что это самый простой способ сделать это.
Комментарии:
1. Почему вы должны привязываться к идентификатору, почему бы просто не привязаться к описанию?
2.
Binding="{Binding Description}"
Не удовлетворяет вашим потребностям?3. Ах, я обновил свой вопрос, чтобы отразить тот факт, что
DataGrid
контекст данных представляет собой списокEvents
, который содержит только свойствоUnitId
. Мне нужно найтиUnitId
в списке объектов Unit, которые у меня есть в моей ViewModel, и отобразитьDescription
базу на этом.
Ответ №1:
- Добавьте свойство типа ‘Unit’ в свой
Event
класс.
Пример:
public class Event
{
// Other properties...
//Replace UnitId property with this property
public Unit Unit {get;set;}
}
- Привязка к
Description
свойствуUnit
класса.
Пример: <DataGridTextColumn Header="Unit" Width="Auto" Binding="{Binding Unit.Description}"/>
Комментарии:
1. Я хотел избежать этого, но я действительно думаю, что это, вероятно, лучший путь. Мне придется изменить свой уровень доступа к данным, чтобы возвращать полный объект Unit, а не только его идентификатор.