首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WFP -重用DataGrid列和资源

WFP -重用DataGrid列和资源
EN

Stack Overflow用户
提问于 2021-06-11 14:46:14
回答 1查看 198关注 0票数 1

我有一个带有两个DataGrid控件的应用程序。尽管它们的ItemsSource绑定到不同的集合,但它们的项类型、列、样式和事件处理程序完全相同。

随着他们的XAML代码越来越大,我如何创建相同的“内容”并在两个DataGrids中重用它?

我目前拥有的是:

代码语言:javascript
复制
<DataGrid x:Name="LeftGrid" 
         ItemsSource="{Binding LeftCollection}" 
         Grid.Column="0"
         CanUserAddRows="False" CanUserDeleteRows="False" AutoGenerateColumns="False">

    <!--exactly the same code from this forward-->
    <DataGrid.Resources>
        <Style TargetType="DataGridRow">
            <EventSetter Event="MouseDoubleClick" Handler="DataGridRow_MouseDoubleClick"/>
        </Style>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Type" Binding="{Binding Type, Mode=OneWay}" IsReadOnly="True"/>
        <DataGridTextColumn Header="Status" Binding="{Binding Status, Mode=OneWay}" IsReadOnly="True"/>
        ...............................
        ................................
        .....................................
    </DataGrid.Columns>
</DataGrid>

然后,复制了相同的“精确”数据,其唯一的更改是NameGrid.ColumnItemsSource (只有XAML的前三行):

代码语言:javascript
复制
<DataGrid x:Name="RightGrid"
         ItemsSource="{Binding RightCollection}" 
         Grid.Column="1"
         CanUserAddRows="False" CanUserDeleteRows="False" AutoGenerateColumns="False">
      
    <!--exactly the same code from this forward-->
    <DataGrid.Resources>
        <Style TargetType="DataGridRow">
            <EventSetter Event="MouseDoubleClick" Handler="DataGridRow_MouseDoubleClick"/>
        </Style>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Type" Binding="{Binding Type, Mode=OneWay}" IsReadOnly="True"/>
        <DataGridTextColumn Header="Status" Binding="{Binding Status, Mode=OneWay}" IsReadOnly="True"/>
        ...............................
        ................................
        .....................................
    </DataGrid.Columns>
</DataGrid>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-11 17:39:08

乍一看,最简单的方法是将其放到UserControl中并在主视图中使用。

代码语言:javascript
复制
<UserControl x:Class="YourNameSpace.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.Resources>
    </UserControl.Resources>
    <Grid>
        <DataGrid ItemsSource="{Binding}">
            <!-- ... -->
        </DataGrid>
    </Grid>
</UserControl>

然后你可以使用:

代码语言:javascript
复制
xmlns:local="clr-namespace:YourNameSpace"
<local:UserControl1 x:Name="LeftGrid" DataContext="{Binding LeftCollection}" Grid.Column="0"/>
<local:UserControl1 x:Name="RightGrid" DataContext="{Binding RightCollection}" Grid.Column="1"/>

如果不希望将集合作为整个DataContext使用,那么当然可以为UserControl中的集合创建一个专用的依赖项属性,并将其绑定到DataGrid.ItemsSource

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67939092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档