WPF模板或样式中的多重绑定

时间:2018-10-15 14:52:46

标签: wpf xaml multibinding wpf-style

我有一个带有许多属性的类(不在列表中),这些属性必须在视图中可切换。使用多重绑定,转换器本身可以正常工作。

            <TextBox Grid.Row="1" Grid.Column="5">
                <TextBox.Text>
                    <MultiBinding Converter="{StaticResource IntValueConvertor}">
                        <Binding Path="property1" />
                        <Binding Path="IntegerDisplay" />
                    </MultiBinding>
                </TextBox.Text>
            </TextBox>

在代码中,“ IntegerDisplay”是在我的VM中定义的属性。 Property1是必须以不同方式查看的许多属性之一(取决于IntegerDisplay)。

我要避免的是需要将整个多绑定转换器添加到每个文本框。

这种风格的东西:

            <TextBox
                Grid.Row="1"
                Grid.Column="4"                    
                Text="{Binding Path=Property1, Converter={StaticResource IntValueConvertor}}" />

我知道此代码不起作用!

我尝试使用一种样式,但无法获得property1的值。 是使用样式的最佳方法还是数据模板更好?

亲切的问候

2 个答案:

答案 0 :(得分:0)

关于我的问题的一些澄清:

我有一个网格,其中包含一些传递VM的texbox。 一些文本框需要不同的视图。 没有模板或样式,转换器将使用以下代码工作:

            <TextBox Grid.Row="1" Grid.Column="1">
                <TextBox.Text>
                    <MultiBinding Converter="{StaticResource IntValueConvertor}">
                        <Binding Path="property1" />
                        <Binding Path="view" />
                    </MultiBinding>
                </TextBox.Text>
            </TextBox>

我不想每次都复制它,并且视图肯定会改变,所以我希望以模板或样式来复制它。

我按照@dean Kuga的建议创建了dataTemplate。

这是数据模板:

<UserControl.Resources>
    <wpf:IntValueConvertor x:Key="IntValueConvertor" EmptyStringValue="0" />
    <DataTemplate x:Key="HexStyleText" >
        <TextBlock>
            <TextBlock.Text>
                <MultiBinding Converter="{StaticResource IntValueConvertor}">
                    <Binding Path="/" />
                    <Binding Path="DataContext.IntegerDisplay" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType=UserControl}" />
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
    </DataTemplate>
</UserControl.Resources>

我不知道如何将其应用于简单的文本块(或文本框)。 列表不是问题。

在Xaml中,我想有一个使用模板的简单文本块:

        <Grid>
            <TextBlock
                Grid.Row="1"
                Grid.Column="5"
                Text="{Binding Path= ......}">
            </TextBlock>
        </Grid>

问题: 我如何分配数据模板,以便它执行转换器? textbox.Text是2种方式的绑定,用于显示值和用作用户的输入字段。

问候

答案 1 :(得分:0)

我建议坚持使用样式,这是这样做的基本开始。

<!--This will go in your resources-->
<Style x:Name="TextBoxStyle" TargetType="{x:Type TextBox}">
            <Setter Property="Text" Value="{Binding Path=Property1, Converter={StaticResource IntValueConverter}, ConverterParameter=IntegerDisplay}"/>
</Style>

<!--This will go in your Display-->
        <TextBox Style="{StaticResource TextBoxStyle}"/>