У меня возникли проблемы с настраиваемым управлением WPF, которое наследуется от сетки данных WPF, и мне нужен совет.
Любая помощь будет оценена.
Я работаю с VS2015 и C # над приложением WPF, в котором я использую - среди стандартных элементов управления WPF - самодельные пользовательские элементы управления.
Теперь я хотел создать новый пользовательский элемент управления, который наследуется от сетки данных WPF, поэтому у меня есть возможность перезаписать событие OnItemsSourceChanged.
Пока я не использую явно определенные столбцы в сетке данных, все в порядке и выглядит как стандартная сетка данных WPF.
Но у меня есть несколько проблем.
Первые события, такие как SelectionChanged, больше не работают, потому что я не поднимаю событие из внутренней таблицы данных моего пользовательского элемента управления на родительский.
Как мне это сделать?
Далее я могу использовать явно определенные столбцы?
Вот несколько примеров определения пользовательского элемента управления и его использования в одном из моих окон WPF:
Сначала определение пользовательского элемента управления:
<Style TargetType="{x:Type local:CustomDataGrid}" BasedOn="{StaticResource {x:Type DataGrid}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomDataGrid}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<DataGrid BorderThickness="{TemplateBinding BorderThickness}"
ColumnHeaderStyle="{TemplateBinding ColumnHeaderStyle}"
ItemsSource="{TemplateBinding ItemsSource}"
CanUserAddRows="{TemplateBinding CanUserAddRows}"
IsReadOnly="{TemplateBinding IsReadOnly}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
И использование в одном из окон WPF.
Обратите внимание, что один из моих коллег внедрил сеточный фильтр.
Должен ли я наследовать фильтр как свойства родительской таблицы данных?
<CustomControls:CustomDataGrid x:Name="grdInputMasksList"
BorderThickness="0"
filter:DataGridExtensions.UseBackgroundWorkerForFiltering="True"
filter:DataGridExtensions.IsClearButtonVisible="False"
filter:DataGridExtensions.IsFilterVisible="True"
ColumnHeaderStyle="{StaticResource {ComponentResourceKey TypeInTargetAssembly={x:Type filter:DataGridHeaderFilterControl},ResourceId=DataGridHeaderFilterControlStyle}}"
ItemsSource="{Binding InputMasksListShortDetails}"
CanUserAddRows="False"
IsReadOnly="True"
AutoGenerateColumns="False"
SelectionChanged="grdInputMasksList_SelectionChanged"
MouseDoubleClick="grdInputMasksList_MouseDoubleClick">
<CustomControls:CustomDataGrid.Columns>
<DataGridTemplateColumn Header="TextDelete" filter:DataGridColumnExtensions.DoNotGenerateFilterControl="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Name="btnRemoveInputMask"
Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}"
Width="30" Height="20" Focusable="False"
CommandParameter="{Binding inputMaskId}"
Click="btnRemoveInputMask_Click">
<StackPanel Orientation="Horizontal">
<Image Source="..\..\pictures\delete_blue.png"/>
</StackPanel>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn x:Name="colInputMaskName"
Binding="{Binding Path=inputMaskName}"
Header="TextInputMaskName"/>
<DataGridCheckBoxColumn x:Name="colIsReleased"
Binding="{Binding isReleasedBool}"
Header="TextIsReleasedShort"/>
<DataGridTextColumn x:Name="colInputMaskText"
Binding="{Binding Path=text}"
Header="TextPropertyDescriptionText"/>
<DataGridTextColumn x:Name="colInputMaskChanger"
Binding="{Binding Path=changedBy}"
Header="TextChangedBy"/>
<DataGridTextColumn x:Name="colInputMaskChangeDate"
Binding="{Binding Path=changeDate, StringFormat='dd.MM.yyyy HH.mm'}"
Header="TextChangeDate"/>
</CustomControls:CustomDataGrid.Columns>
</CustomControls:CustomDataGrid>