我有一个带有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
 (m³)" Binding="{Binding Path=Resultaten[2].Double, StringFormat={}{0:f2}}"/>
<DataGridTextColumn Width="100" Header="verdampt
 (m³)" Binding="{Binding Path=Resultaten[3].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource VerdamptHeader}"/>
<DataGridTextColumn Width="125" Header="geinfiltreerd
 (m³)" Binding="{Binding Path=Resultaten[4].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeinfiltreerdHeader}"/>
<DataGridTextColumn Width="100" Header="geborgen
 (m³)" Binding="{Binding Path=Resultaten[5].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeborgenHeader}"/>
<DataGridTextColumn Width="125" Header="afgestroomd
 (m³)" 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
 (m³)" Binding="{Binding Path=Resultaten[2].Double, StringFormat={}{0:f2}}"/>
<DataGridTextColumn Width="100" Header="geborgen
 (m³)" Binding="{Binding Path=Resultaten[3].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeborgenHeader}"/>
<DataGridTextColumn Width="100" Header="geledigd
 (m³)" Binding="{Binding Path=Resultaten[4].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeinfiltreerdHeader}"/>
<DataGridTextColumn Width="125" Header="overgelopen
 (m³)" Binding="{Binding Path=Resultaten[5].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource AfgestroomdHeader}"/>
<DataGridTextColumn Width="125" Header="overloop
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
oppervlak (m²)" Binding="{Binding Path=Gegevens[1].Double, StringFormat={}{0:f2}}"/>
<DataGridTextColumn Width="1.1*" Header="afstromings
vertraging (min⁻¹)" Binding="{Binding Path=Gegevens[2].Double, StringFormat={}{0:f2}}"/>
<DataGridTextColumn Width="*" Header="oppervlakte
berging (mm)" Binding="{Binding Path=Gegevens[3].Double, StringFormat={}{0:f2}}"/>
<DataGridTextColumn Width="*" Header="verdampings
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
(mm)" Binding="{Binding Path=Gegevens[1].Double, StringFormat={}{0:f2}}"/>
<DataGridTextColumn Width="*" Header="ledigings
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,等等
答案 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
 (m³)" Binding="{Binding Path=Resultaten[2].Double, StringFormat={}{0:f2}}"/>
<DataGridTextColumn Width="100" Header="verdampt
 (m³)" Binding="{Binding Path=Resultaten[3].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource VerdamptHeader}"/>
<DataGridTextColumn Width="125" Header="geinfiltreerd
 (m³)" Binding="{Binding Path=Resultaten[4].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeinfiltreerdHeader}"/>
<DataGridTextColumn Width="100" Header="geborgen
 (m³)" Binding="{Binding Path=Resultaten[5].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeborgenHeader}"/>
<DataGridTextColumn Width="125" Header="afgestroomd
 (m³)" 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
 (m³)" Binding="{Binding Path=Resultaten[2].Double, StringFormat={}{0:f2}}"/>
<DataGridTextColumn Width="100" Header="geborgen
 (m³)" Binding="{Binding Path=Resultaten[3].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeborgenHeader}"/>
<DataGridTextColumn Width="100" Header="geledigd
 (m³)" Binding="{Binding Path=Resultaten[4].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource GeinfiltreerdHeader}"/>
<DataGridTextColumn Width="125" Header="overgelopen
 (m³)" Binding="{Binding Path=Resultaten[5].Double, StringFormat={}{0:f2}}" HeaderStyle="{StaticResource AfgestroomdHeader}"/>
<DataGridTextColumn Width="125" Header="overloop
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>