WPF将从ControlTemplate绑定到后面的代码

时间:2011-07-22 18:31:47

标签: wpf binding

我在App.xaml文件中定义了以下自定义按钮。

    <Style x:Key="DispatchListCallButton" TargetType="Button">
        <Setter Property="OverridesDefaultStyle" Value="True"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Border Name="outerBorder" BorderThickness="1" BorderBrush="DimGray" CornerRadius="1" Background="{TemplateBinding Background}">
                        <Border Name="innerBorder" BorderThickness="1" BorderBrush="WhiteSmoke" CornerRadius="1" Background="{TemplateBinding Background}">
                            <Grid Margin="2">
                                <Grid.RowDefinitions>
                                    <RowDefinition Height="1*"></RowDefinition>
                                    <RowDefinition Height="2*"></RowDefinition>
                                    <RowDefinition Height="Auto"></RowDefinition>
                                    <RowDefinition Height="1*"></RowDefinition>
                                </Grid.RowDefinitions>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock>2600</TextBlock>
                                    <TextBlock Margin="4,0,0,0">IPRJ</TextBlock>
                                </StackPanel>
                                <TextBlock Grid.Row="1" TextWrapping="Wrap">1234 Main St West Avenue</TextBlock>
                                <Rectangle Grid.Row="2" Height="1" Margin="2,0,2,0" Stroke="DarkGray" />
                                <StackPanel Grid.Row="3" Orientation="Horizontal" HorizontalAlignment="Right">
                                    <TextBlock>1</TextBlock>
                                    <TextBlock Margin="4,0,0,0">*</TextBlock>
                                </StackPanel>
                                <ContentPresenter HorizontalAlignment="Stretch" VerticalAlignment="Center" Name="content"/>
                            </Grid>
                        </Border>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

我没有触发因为我没有问题。

这显示我想要的东西,接受所有值当前都是硬编码的。总共有5个TextBlock作为此Button的一部分。我希望能够为这5个文本块中的每一个设置绑定,以便我可以在后面的代码中动态设置它们。理想情况下,这就是我希望我的代码背后的样子。

        DispatchListCallButton newButton = new DispatchListCallButton();

        // Set the 5 TextBlock values
        newButton.Id = "4444";
        newButton.Code = "ABCD";
        newButton.Address = "2000 Main";
        newButton.Priority = 5;
        newButton.Symbol = "*";

我怎样才能做到这一点以及ControlTemplate中的绑定表达式是什么样的?

1 个答案:

答案 0 :(得分:0)

您可以通过以下两种方式之一完成此任务。

第一种方法: 首先,您需要创建从Button继承的控件类型,因为您无法按照现在尝试的样式修改按钮(或实例化)。 然后,您将定义Id,Code等。作为控件的DependencyProperties。如果它们是DependencyProperties,那么代码将自动注册以监听更改。

文章: http://msdn.microsoft.com/en-us/library/ms753358.aspx

第二种方法: 您将为按钮公开ViewModel,该按钮公开这些属性并实现INotifyPropertyChange。每次设置属性时,都要触发事件。然后,您可以将newButton.DataContext设置为ViewModel的实例并修改视图模型。绑定类似于Text = {Binding Address}

文章: http://msdn.microsoft.com/en-us/library/ms229614.aspx