Я пытаюсь получить название свойства, связанного с деталью 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'..., но я хотел бы быть, так, чтобы вышеупомянутый код работал.
Мой вопрос с двумя частями, действительно:
Действительно ли возможно сделать a DataGridTemplateColumn
будьте СВЯЗАНЫ, так, чтобы вышеупомянутый код работал бы? Я могу связать его так или иначе со свойством?
Или я нуждаюсь к чему-то совершенно различному, и изменяю код выше?
Заранее спасибо!
В
Нет, потому что DataGridTemplateColumn
не наследуется от DataGridBoundColumn
, поэтому приведение к DataGridBoundColumn
завершится ошибкой.
Чтобы приведенный выше код работал, все ваши столбцы должны быть унаследованы от абстрактного класса DataGridBoundColumn
. Поэтому создание настраиваемых производных классов столбцов вместо DataGridTemplateColumn
должно работать.
Вы можете просто заполнить
Dictionary
при инициализации, а затем выполнить
var propName = BoundPropName [dgch.Column]
Это сложно один. Мы достигли привязки, перейдя к его прародителю 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>