【问题标题】:WPF: Is it possible to add or modify bindings via styles or something similar?WPF:是否可以通过样式或类似的方式添加或修改绑定?
【发布时间】:2011-02-08 07:20:03
【问题描述】:

我仍在学习 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 代码易于理解:-)。

【问题讨论】:

    标签: wpf xaml binding styles


    【解决方案1】:

    您根本无法使用样式来更改绑定的属性。你可以做的就是使用下面的形式让事情变得更漂亮:

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

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

    【讨论】:

      【解决方案2】:

      您可以在数据模板中指定绑定。问题是将该数据模板放入您想要的文本框中。因此,您所做的是将数据模板设置为包含一个文本框,然后将 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 用户控件/页面中执行的操作。

      但请务必将数据模板添加到您的资源字典中,以便您可以在用户控件/页面中将其作为静态资源引用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-06
        • 2014-08-03
        • 2019-03-20
        • 2011-12-21
        • 2021-07-31
        • 2012-05-26
        相关资源
        最近更新 更多