wpf привязка данных и x: массивы - PullRequest
3 голосов
/ 09 ноября 2010

Я пытаюсь сделать некоторую привязку данных с использованием массива x: Array, определенного в ресурсах, но почему-то он не работает, даже когда код компилируется. В ресурсах я определяю массив строк следующим образом:

<x:Array x:Key="ArrayReportType" Type="{x:Type sys:String}">
    <sys:String>Energy Export</sys:String>
    <sys:String>Cost Center Report</sys:String>
</x:Array>

У меня также есть коллекция предметов. Одно из свойств называется «ReportType» и представляет собой целое число / перечисление. Поэтому я хотел бы сделать привязку данных, чтобы показать соответствующую строку для ReportType вместо int / enum. Я пробовал эту строку, но она не работает (вторая строка вызывает pb):

<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Type"
                    Binding="{Binding Source={StaticResource ArrayReportType}, Path=[{Binding ReportType}]}" />

Я уверен, я близок к решению. Если я напишу прямо «Path = [1]», то это правильно. Во время выполнения я получаю эту ошибку:

System.Windows.Data Ошибка: 40: Ошибка пути BindingExpression: свойство [[] 'не найдено для объекта' '' String [] '(HashCode = 14199578)'. BindingExpression: Path = [{Binding ReportType}]; DataItem = 'String []' (HashCode = 14199578); целевым элементом является TextBlock (Name = ''); Целевым свойством является «Текст» (тип «Строка»)

Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 09 ноября 2010

Хорошо, чтобы использовать DataGridComboBoxColumn?

<DataGridComboBoxColumn Header="Type"
                        ItemsSource="{Binding Source={StaticResource ArrayReportType}}">
    <DataGridComboBoxColumn.EditingElementStyle>
        <Style TargetType="{x:Type ComboBox}">
            <Setter Property="SelectedIndex" Value="{Binding ReportType}" />
        </Style>
    </DataGridComboBoxColumn.EditingElementStyle>
    <DataGridComboBoxColumn.ElementStyle>
        <Style TargetType="{x:Type ComboBox}">
            <Setter Property="SelectedIndex" Value="{Binding ReportType}" />
        </Style>
    </DataGridComboBoxColumn.ElementStyle>
</DataGridComboBoxColumn>

Обновление
Текстовая ячейка только для чтения

<DataGridComboBoxColumn Header="Type"
                        ItemsSource="{Binding Source={StaticResource ArrayReportType}}"
                        IsReadOnly="True">
    <DataGridComboBoxColumn.ElementStyle>
        <Style TargetType="{x:Type ComboBox}">
            <Setter Property="SelectedIndex" Value="{Binding ReportType}" />
        </Style>
    </DataGridComboBoxColumn.ElementStyle>
</DataGridComboBoxColumn>
1 голос
/ 09 ноября 2010

Может быть, вы можете решить эту проблему с помощью специального конвертера.

Что-то в этом роде?

<DataGridTextColumn 
    Header="Type"
    Text="{Binding Converter={StaticResource IndexToArrayItemConverter}, ConverterParameter={StaticResource ArrayReportType}, Path=ReportType}"/>

Код конвертера пропущен из-за его очевидности

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...