如何使用VM的数据绑定将简单的wpf标记提取到usercontrol

时间:2016-04-11 00:35:09

标签: wpf xaml user-controls

我不得不问这个问题,但我整个周末都在阅读微软和非Micorosoft的文档,这一切都要么过于简单化,要么涵盖一些与我无关的奇怪的深奥案例。

我需要的是非常简单的。我有一些标记

            <Viewbox Grid.Row="1" Margin="55,3,15,0">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="303*"></ColumnDefinition>
                        <ColumnDefinition Width="156*"></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <TextBlock Grid.Column="0" Text="{Binding TextSettings.PlayerNumber}" />
                    <TextBlock Grid.Column="1" Text="{Binding PlayerNumber}" />
                </Grid>
            </Viewbox>

出于各种原因,我希望该视图框的内容存在于另一个文件中。它甚至不必可重复使用,它只需要在UserControl中,我可以包含,也可以不包括,或者根据应用程序状态包含不同的用户控件。

我无法弄清楚如何将Grid移动到自己的UserControl中并让绑定继续工作。我假设我必须通过参数将ViewModel从父视图传递给子节点,但对于我的生活,我找不到正确语法的示例。

因此。如果要将其移动到自己的UserControl,

  1. UserControl会是什么样的?
  2. 我需要在UserControl的代码隐藏中添加什么才能使绑定工作?
  3. 包含点会是什么样的?

1 个答案:

答案 0 :(得分:3)

您的数据上下文将在可视树下继承。所以只需定义UserControl

即可
<UserControl x:Class="WpfApplication1.MyUserControl"
         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>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="303*"></ColumnDefinition>
            <ColumnDefinition Width="156*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <TextBlock Grid.Column="0" Text="{Binding TextSettings.PlayerNumber}" />
        <TextBlock Grid.Column="1" Text="{Binding PlayerNumber}" />
    </Grid>
</UserControl>

然后在父窗口中,您需要声明用户控件的命名空间:

xmlns:local="clr-namespace:WpfApplication1" 

然后使用它:

<Viewbox Grid.Row="1" Margin="55,3,15,0">
    <local:MyUserControl/>
</Viewbox>
相关问题