DataGridComboBoxColumn привязка данных - PullRequest
6 голосов
/ 13 августа 2011

Я пытаюсь найти данные DataGridComboBoxColumn

<DataGridComboBoxColumn Header="Number of Copies" SelectedItemBinding="{Binding NumberCopies}">
    <DataGridComboBoxColumn.ElementStyle>
       <Style TargetType="ComboBox">
          <Setter Property="ItemsSource" Value="{Binding LifeAreaList}"/>
          <Setter Property="IsReadOnly" Value="True"/>
       </Style>
    </DataGridComboBoxColumn.ElementStyle>
</DataGridComboBoxColumn>

Что я делаю не так здесь, потому что во время выполнения я получаю пустой комбинированный список.следующий

System.Windows.Data Ошибка: 2: Не удается найти управляющий FrameworkElement или FrameworkContentElement для целевого элемента.BindingExpression: Path = LifeAreaList;DataItem = NULL;целевым элементом является DataGridComboBoxColumn (HashCode = 49475561);Свойство target - «ItemsSource» (тип «IEnumerable»)

Ответы [ 4 ]

9 голосов
/ 13 августа 2011

DataGridColumn не является производным от FrameworkElement или FrameworkContentElement, поэтому его нет в визуальном дереве и не имеет DataContext, поэтому ваша привязка не работает.

Если List<int>, к которому вы привязываетесь, одинаково для каждого элемента, то, возможно, вам следует найти другой способ привязки к нему, возможно, вы можете сделать его статическим и использовать StaticResource в Связывании.

В любом случае, чтобы связать ItemsSource со свойством List<int> в вашем исходном классе, вы можете использовать ElementStyle и ElementEditingStyle (как указано другими). Следующее должно работать

<DataGridComboBoxColumn Header="Number of Copies"
                        SelectedItemBinding="{Binding ListAreaItem}">
    <DataGridComboBoxColumn.ElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding LifeAreaList}"/>
        </Style>
    </DataGridComboBoxColumn.ElementStyle>
    <DataGridComboBoxColumn.EditingElementStyle>
        <Style TargetType="ComboBox">
            <Setter Property="ItemsSource" Value="{Binding LifeAreaList}"/>
        </Style>
    </DataGridComboBoxColumn.EditingElementStyle>
</DataGridComboBoxColumn>
2 голосов
/ 13 августа 2011

Вы не должны устанавливать ItemsSource в стиле, сам столбец имеет такое свойство , которое может переопределять все, что вы можете попытаться установить в стиле. Кроме того, вы пытаетесь установить его в неправильном стиле (этот стиль предназначен для режима отображения), вместо этого вы можете попробовать установить его в EditingElementStyle, но я бы тоже не рекомендовал.

1 голос
/ 13 августа 2011

Почему вы устанавливаете источник в стиле?

Можете ли вы попробовать этот код:

 <my:DataGridTemplateColumn Header="Number of Copies" >
                    <my:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding Path=LifeAreaList}"  >
                               <ComboBox.ItemTemplate>
                                <DataTemplate>
                                    <Label Content="{Binding .}"></Label>
                                </DataTemplate>
                               </ComboBox.ItemTemplate>
                            </ComboBox>
                        </DataTemplate>
                    </my:DataGridTemplateColumn.CellTemplate>
                </my:DataGridTemplateColumn>

Определите шаблон данных для DataGridTemplateColumn, если LifeAreaList представляет собой сложную коллекцию классов и вы хотите отобразить ее настроенным способом.

0 голосов
/ 13 августа 2011

Я бы попробовал обычный DataGridColumn с PresentationTraceSources.TraceLevel = "High" и увидел бы, есть ли у вас проблемы с привязкой.

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