WPF:是否可以通过样式或类似的东西添加或修改绑定?

时间:2010-04-15 09:39:04

标签: wpf xaml binding styles

我还在学习WPF绳索,所以如果以下问题是微不足道的,或者我的方法是错误的,请说出来......我正在努力减少样板,听起来样式是一种常见的方式这样做。特别是:

我有一堆相当普通的数据输入字段。这些字段的控件具有我想根据绑定目标设置的各种属性 - 非常正常的东西。但是,我喜欢在样式中设置绑定本身的属性以避免重复。

例如:

<TextBox Style="{StaticResource myStyle}">
    <TextBox.Text>
        <Binding Path="..." Source="..."
                 ValidatesOnDataErrors="True"
                 ValidatesOnExceptions="True"
                 UpdateSourceTrigger="PropertyChanged">
        </Binding>
    </TextBox.Text>
</TextBox>

现在,有没有办法使用样式 - 或者其他一些技术来编写前面的例子:

<TextBox Style="{StaticResource myStyle}" Text="{Binding Source=... Path=...}/>

也就是说,是否有任何方法可以设置与特定选择匹配的所有绑定(此处,在具有myStyle样式的控件上)以验证数据并使用特定的更新触发器?是否可以自己模板或样式绑定?

或者,是否可以在样式本身中添加绑定?

显然,第二种语法更短,更短,更易读,我希望能够摆脱其他类似的样板来保持我的UI代码易于理解: - )。

2 个答案:

答案 0 :(得分:1)

您根本无法使用样式更改Binding上的属性。你可以做的是使用下面的表格来使事情变得更漂亮:

<TextBox Style="{StaticResource myStyle}"
         Text="{Binding SomePath,Source=SomeSource,ValidatesOnDataErrors=True,ValidatesOnExceptions=True,UpdateSourceTrigger=PropertyChanged}" />

您可以做的另一件事是从Binding派生一个类,并将其用作自定义标记扩展。在派生类构造函数中,您可以设置所有常见的默认值,如UpdateSourceTrigger的PropertyChanged等。

答案 1 :(得分:0)

您可以在datatemplate中指定绑定。问题是将datatemplate放入您想要的文本框中。因此,您所做的是将数据模板设置为包含文本框,然后将ContentControl的内容设置为该静态资源模板,如下所示:

<DataTemplate x:Key="BoundTextbox">
    <TextBlock TextAlignment="Right" VerticalAlignment="Center" TextWrapping="WrapWithOverflow">
        <TextBlock.Text>
            <Binding Path="Path" Source="Source"
                ValidatesOnDataErrors="True"
                ValidatesOnExceptions="True"
                UpdateSourceTrigger="PropertyChanged" />
        </TextBlock.Text>
    </TextBlock>
</DataTemplate>

<ContentControl ContentTemplate="{StaticResource BoundTextbox}" Content="" />

最后一行是您需要在XAML用户控件/页面中添加的内容。

但请务必将datatemplate添加到资源字典中,以便在usercontrol / page中将其作为静态资源引用。