在我的主要XAML中包含“XAML页面”

时间:2014-09-30 09:22:43

标签: c# wpf xaml

我有一个带有DataGrid的TabItem,旁边有一个Graph,这个TabItem基本上必须复制在26个不同的TabItem上,但每个都有不同的DataSource。我想知道是否有办法将这个页面与DataGrid和Graph放在一个单独的XAML页面上,然后在每个不同的TabItem上引用它。

如果可行,是否也可以将变量传递给此XAML页面,因为每个DataGrid都有不同的DataBinding源。

页面代码:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="0.65*" />
        <ColumnDefinition Width="0.35*" />
    </Grid.ColumnDefinitions>
    <TabControl HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Row="0" Grid.Column="1" TabStripPlacement="Bottom">
        <TabItem Header="OPPERVLAKKEN" Controls:ControlsHelper.HeaderFontSize="14">
            <GroupBox Header="waterbalans grafiek" 
                      HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <Canvas x:Name="OppervlakkenCanvas" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" SizeChanged="GrafiekTekenen"/>
            </GroupBox>
        </TabItem>
        <TabItem Header="VOORZIENINGEN" Controls:ControlsHelper.HeaderFontSize="14">
            <GroupBox Header="waterbalans grafiek"
                      HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <Canvas x:Name="VoorzieningenCanvas" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" SizeChanged="GrafiekTekenen"/>
            </GroupBox>
        </TabItem>
    </TabControl>
    <TabControl HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="0" TabStripPlacement="Bottom">
        <TabItem Header="RESULTAAT" Controls:ControlsHelper.HeaderFontSize="14">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <GroupBox Header="waterbalans afvoerend oppervlak" Grid.Row="0" Grid.Column="0"
                          HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                    <DataGrid ItemsSource="{Binding Path=Input.ResultatenCollectie[0].Oppervlakken}" AutoGenerateColumns="False"
                              HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Style="{DynamicResource ResultatenTabel}"
                              CanUserResizeColumns="False" CanUserResizeRows="False" CanUserReorderColumns="False" CanUserSortColumns="False"
                              FrozenColumnCount="2" Margin="0,0,0,0" IsReadOnly="True" ScrollViewer.HorizontalScrollBarVisibility="Visible">
                        <DataGrid.Columns>
                            <DataGridTextColumn Width="25" Header="#" Binding="{Binding Path=Resultaten[0].Int}" HeaderStyle="{StaticResource OmschrijvingHeader}" CellStyle="{StaticResource OmschrijvingCell}"/>
                            <DataGridTextColumn Width="*" Header="oppervlak" Binding="{Binding Path=Resultaten[1].String}" HeaderStyle="{StaticResource OmschrijvingHeader}" CellStyle="{StaticResource OmschrijvingCell}"/>
                            <DataGridTextColumn Width="100" Header="neerslag&#x0a;          (m³)" Binding="{Binding Path=Resultaten[2].Double, StringFormat={}{0:f2}}"/>
                            <DataGridTextColumn Width="100" Header="verdampt&#x0a;           (m&#xb3;)" Binding="{Binding Path=Resultaten[3].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource VerdamptHeader}"/>
                            <DataGridTextColumn Width="125" Header="geinfiltreerd&#x0a;                  (m&#xb3;)" Binding="{Binding Path=Resultaten[4].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeinfiltreerdHeader}"/>
                            <DataGridTextColumn Width="100" Header="geborgen&#x0a;           (m&#xb3;)" Binding="{Binding Path=Resultaten[5].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeborgenHeader}"/>
                            <DataGridTextColumn Width="125" Header="afgestroomd&#x0a;                   (m&#xb3;)" Binding="{Binding Path=Resultaten[6].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource AfgestroomdHeader}"/>
                        </DataGrid.Columns>
                    </DataGrid>
                </GroupBox>
                <GroupBox Header="waterbalans voorziening" Grid.Row="1" Grid.Column="0" 
                          HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                    <DataGrid ItemsSource="{Binding Path=Input.ResultatenCollectie[0].Voorziening}" AutoGenerateColumns="False"
                              HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Style="{DynamicResource ResultatenTabel}"
                              CanUserResizeColumns="False" CanUserResizeRows="False" CanUserReorderColumns="False" CanUserSortColumns="False"
                              FrozenColumnCount="2" Margin="0,0,0,0" IsReadOnly="True" ScrollViewer.HorizontalScrollBarVisibility="Visible">
                        <DataGrid.Columns>
                            <DataGridTextColumn Width="25" Header="#" Binding="{Binding Path=Resultaten[0].Int}" HeaderStyle="{StaticResource OmschrijvingHeader}" CellStyle="{StaticResource OmschrijvingCell}"/>
                            <DataGridTextColumn Width="*" Header="element" Binding="{Binding Path=Resultaten[1].String}" HeaderStyle="{StaticResource OmschrijvingHeader}" CellStyle="{StaticResource OmschrijvingCell}"/>
                            <DataGridTextColumn Width="100" Header="inloop&#x0a;      (m&#xb3;)" Binding="{Binding Path=Resultaten[2].Double, StringFormat={}{0:f2}}"/>
                            <DataGridTextColumn Width="100" Header="geborgen&#x0a;           (m&#xb3;)" Binding="{Binding Path=Resultaten[3].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeborgenHeader}"/>
                            <DataGridTextColumn Width="100" Header="geledigd&#x0a;         (m&#xb3;)" Binding="{Binding Path=Resultaten[4].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeinfiltreerdHeader}"/>
                            <DataGridTextColumn Width="125" Header="overgelopen&#x0a;                 (m&#xb3;)" Binding="{Binding Path=Resultaten[5].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource AfgestroomdHeader}"/>
                            <DataGridTextColumn Width="125" Header="overloop&#x0a;frequentie" Binding="{Binding Path=Resultaten[6].Double, StringFormat={}{0:f0}}"/>
                        </DataGrid.Columns>
                    </DataGrid>
                </GroupBox>
            </Grid>
        </TabItem>
        <TabItem Header="GEGEVENS" Controls:ControlsHelper.HeaderFontSize="14">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*" />
                    <RowDefinition Height="*" />
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <GroupBox Header="gegevens afvoerend oppervlak" Grid.Row="0" Grid.Column="0"
                          HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                    <DataGrid ItemsSource="{Binding Path=Input.OppervlakGegevens}" AutoGenerateColumns="False"
                              HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Style="{DynamicResource ResultatenTabel}"
                              CanUserResizeColumns="False" CanUserResizeRows="False" CanUserReorderColumns="False" CanUserSortColumns="False"
                              FrozenColumnCount="1" Margin="0,0,0,0" IsReadOnly="True">
                        <DataGrid.Columns>
                            <DataGridTextColumn Width="*" Header="omschrijving" Binding="{Binding Path=Gegevens[0].String}" HeaderStyle="{StaticResource OmschrijvingHeader}" CellStyle="{StaticResource OmschrijvingCell}"/>
                            <DataGridTextColumn Width="*" Header="grootte&#x0a;oppervlak (m&#xb2;)" Binding="{Binding Path=Gegevens[1].Double, StringFormat={}{0:f2}}"/>
                            <DataGridTextColumn Width="1.1*" Header="afstromings&#x0a;vertraging (min&#x207b;&#xb9;)" Binding="{Binding Path=Gegevens[2].Double, StringFormat={}{0:f2}}"/>
                            <DataGridTextColumn Width="*" Header="oppervlakte&#x0a;berging (mm)" Binding="{Binding Path=Gegevens[3].Double, StringFormat={}{0:f2}}"/>
                            <DataGridTextColumn Width="*" Header="verdampings&#x0a;factor (0-1)" Binding="{Binding Path=Gegevens[4].Double, StringFormat={}{0:f2}}"/>
                        </DataGrid.Columns>
                    </DataGrid>
                </GroupBox>
                <GroupBox Header="gegevens voorziening" Grid.Row="1" Grid.Column="0" 
                          HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                    <DataGrid ItemsSource="{Binding Path=Input.VoorzieningGegevens}" AutoGenerateColumns="False"
                              HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Style="{DynamicResource ResultatenTabel}"
                              CanUserResizeColumns="False" CanUserResizeRows="False" CanUserReorderColumns="False" CanUserSortColumns="False"
                              FrozenColumnCount="1" Margin="0,0,0,0" IsReadOnly="True">
                        <DataGrid.Columns>
                            <DataGridTextColumn Width="*" Header="element" Binding="{Binding Path=Gegevens[0].String}" HeaderStyle="{StaticResource OmschrijvingHeader}" CellStyle="{StaticResource OmschrijvingCell}"/>
                            <DataGridTextColumn Width="*" Header="berging&#x0a;(mm)" Binding="{Binding Path=Gegevens[1].Double, StringFormat={}{0:f2}}"/>
                            <DataGridTextColumn Width="*" Header="ledigings&#x0a;capaciteit (mm/h)" Binding="{Binding Path=Gegevens[2].Double, StringFormat={}{0:f2}}"/>
                        </DataGrid.Columns>
                    </DataGrid>
                </GroupBox>
            </Grid>
        </TabItem>
    </TabControl>
</Grid>

每页上唯一不同的是:

ItemsSource="{Binding Path=Input.ResultatenCollectie[0].Oppervlakken}"

0必须是1,然后是2,等等

1 个答案:

答案 0 :(得分:0)

  

我认为最好的解决方案是使用带有的ItemsControl   DataTemplate中。在此DataTemplate中,您定义使用&#34;您的&#34;控制。   DataSource的问题是,你需要的可能性   在每个控件上定义它。你在哪里尝试获取这些数据源?   最好的解决方案是在&#34;您的&#34;中添加一个Dependendy Property。控制   并将其绑定在DataTemplate中。但请:给我们一些代码!

编辑: 我完全误解了你的问题。这是另一个建议: 创建一个新的WPF UserControl(MyTabItem.xaml)

<UserControl x:Class="WpfApplication1.MyTabItem"
         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" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>
    <TabItem Header="RESULTAAT">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <GroupBox Header="waterbalans afvoerend oppervlak" Grid.Row="0" Grid.Column="0"
                      HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <DataGrid x:Name="MyDataGrid"  AutoGenerateColumns="False"
                          HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Style="{DynamicResource ResultatenTabel}"
                          CanUserResizeColumns="False" CanUserResizeRows="False" CanUserReorderColumns="False" CanUserSortColumns="False"
                          FrozenColumnCount="2" Margin="0,0,0,0" IsReadOnly="True" ScrollViewer.HorizontalScrollBarVisibility="Visible">
                    <DataGrid.Columns>
                        <DataGridTextColumn Width="25" Header="#" Binding="{Binding Path=Resultaten[0].Int}" HeaderStyle="{StaticResource OmschrijvingHeader}" CellStyle="{StaticResource OmschrijvingCell}"/>
                        <DataGridTextColumn Width="*" Header="oppervlak" Binding="{Binding Path=Resultaten[1].String}" HeaderStyle="{StaticResource OmschrijvingHeader}" CellStyle="{StaticResource OmschrijvingCell}"/>
                        <DataGridTextColumn Width="100" Header="neerslag&#x0a;          (m³)" Binding="{Binding Path=Resultaten[2].Double, StringFormat={}{0:f2}}"/>
                        <DataGridTextColumn Width="100" Header="verdampt&#x0a;           (m&#xb3;)" Binding="{Binding Path=Resultaten[3].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource VerdamptHeader}"/>
                        <DataGridTextColumn Width="125" Header="geinfiltreerd&#x0a;                  (m&#xb3;)" Binding="{Binding Path=Resultaten[4].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeinfiltreerdHeader}"/>
                        <DataGridTextColumn Width="100" Header="geborgen&#x0a;           (m&#xb3;)" Binding="{Binding Path=Resultaten[5].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeborgenHeader}"/>
                        <DataGridTextColumn Width="125" Header="afgestroomd&#x0a;                   (m&#xb3;)" Binding="{Binding Path=Resultaten[6].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource AfgestroomdHeader}"/>
                    </DataGrid.Columns>
                </DataGrid>
            </GroupBox>
            <GroupBox Header="waterbalans voorziening" Grid.Row="1" Grid.Column="0" 
                      HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                <DataGrid ItemsSource="{Binding Path=Input.ResultatenCollectie[0].Voorziening}" AutoGenerateColumns="False"
                          HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Style="{DynamicResource ResultatenTabel}"
                          CanUserResizeColumns="False" CanUserResizeRows="False" CanUserReorderColumns="False" CanUserSortColumns="False"
                          FrozenColumnCount="2" Margin="0,0,0,0" IsReadOnly="True" ScrollViewer.HorizontalScrollBarVisibility="Visible">
                    <DataGrid.Columns>
                        <DataGridTextColumn Width="25" Header="#" Binding="{Binding Path=Resultaten[0].Int}" HeaderStyle="{StaticResource OmschrijvingHeader}" CellStyle="{StaticResource OmschrijvingCell}"/>
                        <DataGridTextColumn Width="*" Header="element" Binding="{Binding Path=Resultaten[1].String}" HeaderStyle="{StaticResource OmschrijvingHeader}" CellStyle="{StaticResource OmschrijvingCell}"/>
                        <DataGridTextColumn Width="100" Header="inloop&#x0a;      (m&#xb3;)" Binding="{Binding Path=Resultaten[2].Double, StringFormat={}{0:f2}}"/>
                        <DataGridTextColumn Width="100" Header="geborgen&#x0a;           (m&#xb3;)" Binding="{Binding Path=Resultaten[3].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeborgenHeader}"/>
                        <DataGridTextColumn Width="100" Header="geledigd&#x0a;         (m&#xb3;)" Binding="{Binding Path=Resultaten[4].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeinfiltreerdHeader}"/>
                        <DataGridTextColumn Width="125" Header="overgelopen&#x0a;                 (m&#xb3;)" Binding="{Binding Path=Resultaten[5].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource AfgestroomdHeader}"/>
                        <DataGridTextColumn Width="125" Header="overloop&#x0a;frequentie" Binding="{Binding Path=Resultaten[6].Double, StringFormat={}{0:f0}}"/>
                    </DataGrid.Columns>
                </DataGrid>
            </GroupBox>
        </Grid>
    </TabItem>
</Grid>

使用MyTabItem.xaml.cs

    /// <summary>
/// Interaction logic for MyTabItem.xaml
/// </summary>
public partial class MyTabItem : UserControl
{
    public static readonly DependencyProperty MyDatasourceProperty = DependencyProperty.Register("MyDatasource", typeof(IEnumerable), typeof(MyTabItem), new PropertyMetadata(default(IEnumerable), MyDataSourceChangedCallback));

    private static void MyDataSourceChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var myobj = d as MyTabItem;
        if (myobj == null) return;
        myobj.MyDataSourceChanged(d, e);
    }

    private void MyDataSourceChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs dependencyPropertyChangedEventArgs)
    {
        MyDataGrid.ItemsSource = dependencyPropertyChangedEventArgs.NewValue as IEnumerable;
    }

    public MyTabItem()
    {
        InitializeComponent();
    }

    public IEnumerable MyDatasource
    {
        get { return (IEnumerable)GetValue(MyDatasourceProperty); }
        set { SetValue(MyDatasourceProperty, value); }
    }
}

然后你可以像这样使用它:

        <TabControl HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.Column="0" TabStripPlacement="Bottom">
        <wpfApplication1:MyTabItem MyDatasource="{Binding Path=Input.ResultatenCollectie[0].Oppervlakken}"       />
        <wpfApplication1:MyTabItem MyDatasource="{Binding Path=Input.ResultatenCollectie[1].Oppervlakken}"       />
        <wpfApplication1:MyTabItem MyDatasource="{Binding Path=Input.ResultatenCollectie[2].Oppervlakken}"       />
    </TabControl>