Невозможно установить привязку элемента UserControl в WPF - PullRequest
0 голосов
/ 23 апреля 2019

Я работаю над приложением WPF и не хочу копировать / вставлять код. Я хочу многократно используемые элементы, как в React / JavaScript. В этом конкретном случае у меня есть DataGrid, который я хочу использовать в разных местах моего приложения с разными привязками / переменными. Я не хочу копировать / вставлять DataGrid-XAML каждый раз

Вот определение моего шаблона для моей DataGrid:

    <Window.Resources>
        <ControlTemplate x:Key="PersonTableTemplate" >
            <DataGrid AutoGenerateColumns="False" Background="Transparent" RowBackground="Transparent" IsReadOnly="True" HeadersVisibility="Column">
                <DataGrid.Resources>
                    <Style TargetType="{x:Type DataGridRow}">
                        <Setter Property="Background" Value="#00000000" />
                        <Setter Property="Height" Value="30" />
                        <Setter Property="Foreground" Value="DarkGray" />
                        <Setter Property="FontSize" Value="18" />
                    </Style>
                    <Style TargetType="{x:Type DataGridCell}">
                        <Setter Property="BorderThickness" Value="0" />
                        <Setter Property="FocusVisualStyle" Value="{x:Null}" />
                        <Setter Property="HorizontalAlignment" Value="Right" />
                        <Style.Triggers>
                            <Trigger Property="IsSelected" Value="True">
                                <Setter Property="Background" Value="#00000000" />
                                <Setter Property="Foreground" Value="DarkGray" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                    <Style TargetType="{x:Type DataGridColumnHeader}">
                        <Setter Property="Background" Value="#FF151515" />
                        <Setter Property="Height" Value="30" />
                        <Setter Property="Foreground" Value="DarkGray" />
                        <Setter Property="FontFamily" Value="Maven Pro" />
                        <Setter Property="FontSize" Value="28" />
                        <Setter Property="HorizontalAlignment" Value="Right" />
                    </Style>
                </DataGrid.Resources>

                <DataGrid.Columns>
                    <DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="35" />
                    <DataGridTextColumn Header="Gender" Binding="{Binding Gender}" Width="100" />
                    <DataGridTextColumn Header="Age" Binding="{Binding Age}" Width="100" />
                    <DataGridTextColumn Header="Adress" Binding="{Binding Adress}" Width="100" />
                </DataGrid.Columns>
            </DataGrid>
        </ControlTemplate>
    </Window.Resources>

И в некоторых других местах я хочу использовать этот шаблон следующим образом:

<DataGrid DataContext="{Binding PersonTable}" ItemsSource="{Binding PersonsFromCanada}" Template="{StaticResource PersonTableTemplate}"  />
<DataGrid DataContext="{Binding PersonTable}" ItemsSource="{Binding PersonsFromMexiko}" Template="{StaticResource PersonTableTemplate}"  />

Но, к сожалению, это не работает, потому что таблица всегда пуста.

Если я помещу DataContext и ItemsSource прямо в шаблон, как это ...

<ControlTemplate x:Key="PersonTableTemplate" >
    <DataGrid DataContext="{Binding PersonTable}" ItemsSource="{Binding PersonsFromCanada}" AutoGenerateColumns="False" Background="Transparent" RowBackground="Transparent" IsReadOnly="True" HeadersVisibility="Column">
...

... тогда таблица не пуста, но (очевидно) всегда имеет одинаковое содержимое.

Как я могу передать различные переменные PersonsFromCanada и PersonsFromMexiko в шаблон?

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