WPF - Как связать DataGridTemplateColumn

Я пытаюсь получить название свойства, связанного с деталью DataGridColumn, так, чтобы я мог затем сделать некоторый материал на основе этого. Эта функция вызвана, когда пользователь нажимает объект контекстного меню на заголовок столбца...

Это хорошо для out-of-the-box готово прокрученные типы столбца как DataGridTextColumn, так как они связываются, но проблема состоит в том, что некоторые мои столбцы DataGridTemplateColumns, которые не связываются.

private void GroupByField_Click (object sender, RoutedEventArgs e){
        MenuItem mi = (MenuItem)sender;
        ContextMenu cm = (ContextMenu) mi.Parent;
        DataGridColumnHeader dgch = (DataGridColumnHeader) cm.PlacementTarget;  
        DataGridBoundColumn dgbc = (DataGridBoundColumn) dgch.Column;
        Binding binding = (Binding) dgbc.Binding;
        string BoundPropName = binding.Path.Path;

        //Do stuff based on bound property name here...
    }

Так, возьмите, например, мой Name столбец... это - a DataGridTemplateColumn (так как это имеет изображение и некоторый другой материал там). Поэтому это на самом деле не связывается со свойством 'Name'..., но я хотел бы быть, так, чтобы вышеупомянутый код работал.

Мой вопрос с двумя частями, действительно:

  1. Действительно ли возможно сделать a DataGridTemplateColumn будьте СВЯЗАНЫ, так, чтобы вышеупомянутый код работал бы? Я могу связать его так или иначе со свойством?

  2. Или я нуждаюсь к чему-то совершенно различному, и изменяю код выше?

Заранее спасибо!

В

18
задан Daniel 18 February 2013 в 16:03
поделиться

2 ответа

  1. Нет, потому что DataGridTemplateColumn не наследуется от DataGridBoundColumn , поэтому приведение к DataGridBoundColumn завершится ошибкой.
    Чтобы приведенный выше код работал, все ваши столбцы должны быть унаследованы от абстрактного класса DataGridBoundColumn . Поэтому создание настраиваемых производных классов столбцов вместо DataGridTemplateColumn должно работать.

  2. Вы можете просто заполнить

    Dictionary BoundPropName;

    при инициализации, а затем выполнить

    var propName = BoundPropName [dgch.Column]

0
ответ дан 30 November 2019 в 07:12
поделиться

Это сложно один. Мы достигли привязки, перейдя к его прародителю UserControl (у нас был DataGrid внутри UserControl), а UserControl был привязан к Presenter (Model в нашем случае). В приведенном ниже коде проверьте свойство SelectedItem элемента AutoCompleteBox. внутри DataGridTemplateColumn.

<wpfToolkit:DataGridTemplateColumn  Header="{x:Static resources:Store.ItemNameC}" Width="0.60*">
  <wpfToolkit:DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
        <extended:HOAutoCompleteBox
                            IsTextCompletionEnabled ="True"
                            x:Name="ItemAutoCompleteBox"
                            Populating="ItemAutoCompleteBox_Populating"
                            DefaultType="HealthObject.ObjectModel.pSearchStockItemResult,HealthObject.ObjectModel"
                            Text="{Binding Path= ItemName, Mode=TwoWay}" 
                            <!--- **** HERE IS THE BINDING SAMPLE *****-->
            SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}},  Path=Model.SelectedStockItem, Mode=TwoWay}">
        </extended:HOAutoCompleteBox>
    </DataTemplate>
  </wpfToolkit:DataGridTemplateColumn.CellEditingTemplate>

</wpfToolkit:DataGridTemplateColumn>
2
ответ дан 30 November 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: