【发布时间】:2014-02-02 00:40:32
【问题描述】:
我的 C# Metro 应用程序中有一个 StackPanel,它使用 MVVM Light,上面有几个子控件。我希望一些子控件使用视图的主 DataContext 集。但是有一些子控件我想指向不同的 DataContext。我不想添加另一个 StackPanel 或其他容器控件只是为了按 DataContext 对子控件进行分组,因为这会造成很大的混乱。我想要的是一些“无害”的 XAML 元素,它接受我可以用来以所需方式对控件进行分组的 DataContext 属性。例如,假设有一个名为 GroupByDataContext 的假设 XAML 元素,那么我的 XAML 代码将如下所示的 XAML 块中所示。在这个假设的示例中,我将有两个名为 ViewModel1 和 ViewModel2 的视图模型,我将使用假设的 GroupByDataContext 元素对它们进行分组。
是否有用于此目的的 XAML 元素?还是有其他方法可以完成这项任务?
<StackPanel x:Name="stackTopRow" HorizontalAlignment="Left" Height="115" VerticalAlignment="Center" Width="1226" Grid.Column="1" Margin="10,15,0,10" Orientation="Horizontal">
<GroupByDataContext DataContext="{Binding Source={StaticResource Locator}, Path=ViewModelName1}"
<TextBlock x:Name="pageTitle" Text="{StaticResource AppName}" IsHitTestVisible="false" Style="{StaticResource PageHeaderTextStyle}" Margin="10,0,60,0" VerticalAlignment="Center"/>
<TextBlock TextWrapping="Wrap" x:Name="userName" Text="You're not signed in." FontSize="36" RenderTransformOrigin="-4.832,0.596" VerticalAlignment="Center"/>
</GroupByDataContext>
<GroupByDataContext DataContext="{Binding Source={StaticResource Locator}, Path=ViewModelName2}"
<TextBlock TextWrapping="Wrap" Text="Search" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="36" Margin="0,39,0,38" Width="121" RenderTransformOrigin="-4.832,0.596" Visibility="Collapsed" />
<TextBox x:Name="txtQuery" TextWrapping="Wrap" Text="TextBox" Width="605" Margin="0,36,0,35" VerticalAlignment="Center" FontSize="24" HorizontalAlignment="Right" Visibility="Collapsed"/>
<Controls:ImageButton x:Name="btnSearch" Content="ImageButton" Width="79" Margin="0,36,0,38" VerticalAlignment="Center" Height="41" NormalStateImageSource="Assets/StoreLogo.png" Visibility="Collapsed"/>
</GroupByDataContext>
</StackPanel>
【问题讨论】:
-
使用另一个
StackPanel。否则创建一个UserControl,它又包含一个StackPanel。 -
所有元素都允许您指定控件的DataContext。对于您的示例, GroupByDataContext 类可能只是一个简单的 StackPanel
标签: c# xaml mvvm mvvm-light datacontext