Использование конвертера с изображением в сетке данных - PullRequest
2 голосов
/ 08 ноября 2011

Я запутался в этом преобразователе данных, особенно в связи с несколькими строками, и динамически показываю / скрываю изображение.

Давайте рассмотрим основные / подробные данные. В данном представлении (презентации) у меня есть информация заголовка и сетка данных, показывающая несколько позиций. Перед сохранением позиций может быть одна или несколько строк с отсутствующими / недействительными данными. Я хочу отобразить графическое изображение слева от позиции, давая пользователю визуальную подсказку, что ... эй, эту строку нужно исправить ...

Итак, в моей ViewModel есть таблица данных, в которой есть дополнительный столбец, указывающий, есть ли ошибки, связанные со строкой, так как типы столбцов с логическими значениями и данными не имеют представления о том, как обрабатывать тип данных wpf "видимость". Этот datatable.DefaultView является фактической основой для отображения данных (который работает). Я просто застрял в этом последнем, заставляя изображение динамически показывать / скрывать правильно.

Я читал о конвертерах, и у меня есть класс, который ничего не делает, но действует как конвертер. Поэтому я могу предложить только следующее для тех, кто может предложить помощь.

My ViewModel имеет свойство, открывающее DefaultView

public DataView MyDetailView
{ get { return MyTable.DefaultView; }}

Для простоты в этой таблице два столбца.

RecordIsInvalid (boolean), 
LineItem (int)

1 Ответ

1 голос
/ 08 ноября 2011

Использование BooleanToVisibilityConverter Связывание должно быть довольно простым:

<Image Visibility="{Binding RecordIsInvalid, 
                    Converter={StaticResource BooleanToVisibilityConverter}}" ... />

Но, насколько я понимаю, у вас есть один RecordIsInvalid флаг и LineNumber, которые относятся к определенной строке. Что на самом деле связано с каждой строкой? У вас есть что-то вроде ItemViewModel, которые соответствуют каждой строке? По сути, каждый Элемент должен отвечать за проверку своего состояния и выставлять свойство IsValid таким образом, чтобы все было очень чисто и легко, поэтому вы можете просто привязать к IsValid в области действия каждого элемента вида сетки.

РЕДАКТИРОВАТЬ: Ответ на комментарий

Вы не должны создавать и открывать конвертер самостоятельно.

  • Поместите класс конвертера в некоторое подходящее пространство имен, например MyProject.GUI.Converters
  • В View.xaml добавьте псевдоним пространства имен для Converetrs, см. * 1
  • Добавить конвертер в ресурсы Control / Window в XAML, см. * 2

* 1: MyView.xaml

<UserControl ...
       xmlns:Converters="clr-namespace:MyProject.GUI.Converters" />

* 2: MyView.xaml

<UserControl.Resources>
    <Converters:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</UserControl.Resources>
...