DataTemplate和ContentControl当用户类为DataContext时

时间:2013-07-26 07:45:12

标签: c# wpf

我拥有的: 用户类

public class MyButton
    {
        public String ButtonProperty { get; set; }
        public String LabelProperty { get; set; }

        public MyButton()
        {
            ButtonProperty = "MyButtonText!";
            LabelProperty = "LabelText!";
        }
    }

在窗口资源中定义的DataTemplate

<Window.Resources>
        <DataTemplate DataType="{x:Type local:MyButton}">
               <Border Width="100" Height="100" BorderThickness="2" BorderBrush="Aquamarine">
                    <StackPanel >
                        <Button>
                            <TextBlock Text="{Binding ButtonProperty}"></TextBlock>
                        </Button>
                        <Label Content="{Binding LabelProperty}"></Label>
                   </StackPanel>
            </Border>
        </DataTemplate>
</Window.Resources>

我希望DataTemplate将绘制而不是MyButton类的实例

<Window x:Class="WpfApplication7.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication7" 
    Title="MainWindow" Height="500" Width="800">
    <Window.Resources>
        <DataTemplate DataType="{x:Type local:MyButton}">
            <Border Width="100" Height="100" BorderThickness="2" BorderBrush="Aquamarine">
                <StackPanel >
                    <Button>
                    <TextBlock Text="{Binding ButtonProperty}">

                    </TextBlock>
                    </Button>
                    <Label Content="{Binding LabelProperty}">
                    </Label>
                </StackPanel>
            </Border>
        </DataTemplate>
    </Window.Resources>

   <!-- Create instance of MyButton in XAML-->
   <local:MyButton></local:MyButton> 


</Window>

它工作正常,但最终不是我想要的。如果MyButton的实例将DataContext for Window?

,该怎么办?
 public MainWindow()
        {
            //Set instance of MyButton as DataContext
            DataContext = new MyButton();
            InitializeComponent();
        }  

我想我必须在XAML方面写一下

<ContentControl DataContext="{Binding}">
   <!--MyButton XAML code from DataTemplate here -->  

</ContentControl>


instead of

<local:MyButton></local:MyButton>

但它根本不起作用。我做错了什么?

2 个答案:

答案 0 :(得分:1)

您应该尝试绑定到ContentControl的Content属性而不是DataContext属性:

<ContentControl Content={Binding } />

此外,ContentControl的DataContext已经是MyButton。

答案 1 :(得分:0)

我不确定你想要在那里实现什么。如果您只想扩展默认Button的功能,可以定义attached properties

为什么您希望Window的DataContext成为Button?也许相反?不确定我是否正确理解了这一部分。