Преобразование значения DataGrid из идентификатора int в строковое описание

#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:

  1. Добавьте свойство типа ‘Unit’ в свой Event класс.

Пример:

 public class Event
{
    // Other properties...

    //Replace UnitId property with this property
    public Unit Unit {get;set;}

}
  
  1. Привязка к Description свойству Unit класса.

Пример: <DataGridTextColumn Header="Unit" Width="Auto" Binding="{Binding Unit.Description}"/>

Комментарии:

1. Я хотел избежать этого, но я действительно думаю, что это, вероятно, лучший путь. Мне придется изменить свой уровень доступа к данным, чтобы возвращать полный объект Unit, а не только его идентификатор.