Я пытаюсь разобраться в этом и не могу видеть свет в темноте.WPF DataGrid Ячейка привязки данных из родительского контроля
У меня есть рабочие таблицы (таблицы) в рабочем пространстве. Все динамические (столбцы, монтирование таблиц, ...). Основываясь на объекте для рабочего листа, я хотел бы установить поворот datagrid.
В.М. Структура:
ControlVM :
{ Workspace: [
{
Worksheet: [
{
DataViewBindingData: [DataView type],
isRotated: rue | false
},
{...}
]
}
<ScrollViewer Grid.Column="0" Grid.Row="0" >
<ItemsControl ItemsSource="{Binding Path=Workspace}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Expander Header="{Binding Path=WorksheetName}" ExpandDirection="Down" IsExpanded="True" >
<StackPanel>
<DataGrid CanUserResizeColumns="False" HeadersVisibility="Column" CanUserSortColumns="False" HorizontalAlignment="Stretch" CanUserAddRows="False" Margin="5"
SelectionUnit="Cell" SelectionMode="Single" ItemsSource="{Binding Path=DataViewBindingData}" Loaded="DataGrid_Loaded"
BeginningEdit="DataGrid_BeginningEdit" />
</StackPanel>
</Expander>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
И внутри пользовательских стилей ресурсы в моем базовом стиле для управления (заголовок, клетки), я пытаюсь получить доступ к isRotated свойство рабочего листа объекта
<Style x:Key="DataGridBase" TargetType="Control">
<Style.Triggers>
<!-- TODO cannot find an ancestor for data binding -->
<DataTrigger Binding="{Binding IsRotated, Converter={StaticResource DebugConverter}, Mode=OneWay}" Value="True">
<Setter Property="LayoutTransform">
<Setter.Value>
<TransformGroup>
<RotateTransform Angle="-90" />
<ScaleTransform ScaleX="-1" ScaleY="1" />
</TransformGroup>
</Setter.Value>
</Setter>
<Setter Property="TextOptions.TextFormattingMode" Value="Display" />
</DataTrigger>
</Style.Triggers>
</Style >
<!--DataGrid Cells-->
<Style TargetType="{x:Type DataGridCell}" BasedOn="{StaticResource DataGridBase}" />
и то проблема, я не знаю, как получить доступ к данным родительского элемента управления для привязки свойства. Спасибо за предложения.
Спасибо за ответ! Я придумал подобное решение, но проблема, в которой я застряла, заключается в том, что DataGrid использует свойство, называемое DataViewBindingData, и на том же уровне (свойство) is isRotated. Итак, как вы можете получить доступ к этому из ItemSource datagrid? Рабочая область - [имеет много] -> Рабочий лист {DataViewBindingData, IsRotated} и ItemSource для DataGrid - DataViewBindingData. Код: ObservableCollection Рабочее пространство. Спасибо за вашу помощь, оцените его –
stenly
@stenly вы действительно пробовали этот код? Я знаю, что 'ItemsSource' привязан к DataViewBindingData', поскольку DataContext DataGrid должен быть« Worksheet », а« Worksheet »имеет свойство IsRotated. Таким образом, код, который я опубликовал в моем ответе, поможет связать «IsRotated» и проверить значение «True» в DataTrigger. –
это работает :) но как это возможно? Спасибо за помощь – stenly