WPF 多值绑定(MultiBinding)与多属性触发器(MultiTrigger)与多数据触发器(MultiDataTrigger)

这篇具有很好参考价值的文章主要介绍了WPF 多值绑定(MultiBinding)与多属性触发器(MultiTrigger)与多数据触发器(MultiDataTrigger)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MultiBinding

当一个控件的某个属性需要绑定到多个值的时候,需要使用MultiBinding.

例子1

一个文本显示Person的Name和Age

 <TextBlock>
   <TextBlock.Text>
       <MultiBinding StringFormat="{}Name:{0},Age:{1}">
           <Binding Path="Person.Name"></Binding>
           <Binding Path="Person.Age"></Binding>
       </MultiBinding>
   </TextBlock.Text>
</TextBlock>
例子2

WPF 多值绑定(MultiBinding)与多属性触发器(MultiTrigger)与多数据触发器(MultiDataTrigger)
当1,2,3都被选中时,下面的红色框隐藏,不使用后台代码逻辑。
这个时候,使用MultiBinding+MultiValueConverter可实现需求
首先定义多值转换器:

 public class ToVisibilityMultiValueConverter : IMultiValueConverter
 {
      public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
      {
          if (values == null || values.Length != 3) return Visibility.Visible;

          if (values[0] == null || values[1] == null || values[2] == null) return Visibility.Visible;

          return ((bool)values[0] && (bool)values[1] && (bool)values[2]) ? Visibility.Collapsed : Visibility.Visible;
      }

      public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
      {
          throw new NotImplementedException();
      }
  }

XAML如下:

<Window x:Class="MultiBindingTest.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:local="clr-namespace:MultiBindingTest"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        Title="MainWindow"
        Width="300"
        Height="250"
        mc:Ignorable="d">
    <Window.Resources>
        <local:ToVisibilityMultiValueConverter x:Key="ToVisibilityMultiValueConverter" />
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="40" />
            <RowDefinition />
        </Grid.RowDefinitions>
        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal">
            <CheckBox x:Name="chk1" Margin="5" Content="1" />
            <CheckBox x:Name="chk2" Margin="5" Content="2" />
            <CheckBox x:Name="chk3" Margin="5" Content="3" />
        </StackPanel>
        <Rectangle Grid.Row="1" Width="100" Height="100" Fill="Red">
            <Rectangle.Visibility>
                <MultiBinding Converter="{StaticResource ToVisibilityMultiValueConverter}">
                    <Binding ElementName="chk1" Path="IsChecked" />
                    <Binding ElementName="chk2" Path="IsChecked" />
                    <Binding ElementName="chk3" Path="IsChecked" />
                </MultiBinding>
            </Rectangle.Visibility>
        </Rectangle>

    </Grid>
</Window>

MultiTrigger

与Trigger属性对应
当一个或多个控件本身的其他属性的值共同达到某一个条件时,触发一组属性变化。
使用场景:例如鼠标在按钮上且鼠标按下时,按钮的颜色为蓝色

MultiDataTrigger

与DataTrigger对应
当一个或多个DataContext中的值达到某一个条件来触发操作时,需要使用MutiDataTrigger.
使用场景:
例如 一个按钮的DataContext中有一个对象Person,当Person的Name为“Tony”且Age为20时,按钮的背景色为黄色文章来源地址https://www.toymoban.com/news/detail-446166.html

 <MultiTrigger>
    <MultiTrigger.Conditions>
        <Condition Property="IsMouseOver" Value="true"></Condition>
        <Condition Property="IsPressed"
                   Value="true"></Condition>
    </MultiTrigger.Conditions>
    <MultiTrigger.Setters>
        <Setter Property="Background" Value="blue"></Setter>
    </MultiTrigger.Setters>
</MultiTrigger>
<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding Person.Name}"
                   Value="Tony"></Condition>
        <Condition Binding="{Binding Person.Age}"
                   Value="20"></Condition>
    </MultiDataTrigger.Conditions>
    <MultiDataTrigger.Setters>
        <Setter Property="Background"
                Value="Yellow"></Setter>
    </MultiDataTrigger.Setters>
</MultiDataTrigger>

到了这里,关于WPF 多值绑定(MultiBinding)与多属性触发器(MultiTrigger)与多数据触发器(MultiDataTrigger)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【WPF】异步任务更新UI、绑定命令、绑定字符串属性

    WPF异步任务 主界面 在视图模型中定义命令: 在主界面xaml中绑定命令:  创建命令实例:

    2024年02月09日
    浏览(45)
  • WPF 数据绑定类属性 和数据更新

    WPF中数据绑定是一个非常强大的功能,不仅可以绑定后台数据,还可以进行实时更新。 在后台创建模型类,然后在标签页面进行导入并绑定。 // 实现数据更新需要再模型类里面添加INotifyPropertyChanged接口 // INotifyPropertyChanged 检查属性是否发生变化的接口 此方法在模型类数据变

    2024年04月15日
    浏览(24)
  • 按照Vue写WPF(1):属性绑定

    作为一个使用Vue非常熟练的C#全干工程师。当我在接触WPF的时候,我就一直想用Vue的想法去重写WPF框架。经过一个星期的琢磨,终于琢磨出来了如何优雅的入参。期间看了上百篇博客,浏览了一堆的视频教程。 用户控件的cs TestController.xaml TestController.xaml.cs 用户控件的xaml Tes

    2024年02月15日
    浏览(29)
  • WPF如果未定义绑定的属性,程序如何处理

    问题 :wpf中, Button IsEnabled=\\\"{Binding IsValid1}\\\"/Button ,如果没定义绑定的属性IsValid1,可以正常用吗 解答 :在 WPF 中,如果没有定义绑定的属性 IsValid1,会导致绑定失败,从而使 Button 的 IsEnabled 属性无法正常绑定。在这种情况下,Button 的 IsEnabled 属性将保持默认值,即为 true。

    2024年02月11日
    浏览(26)
  • 【WPF】解决无法对“xxx”类型的只读属性“xxx”进行TwoWay或OneWayToSource绑定

    System.InvalidOperationException:“无法对“AowisingWincc.ViewModels.DialogScanDevicesViewModel”类型的只读属性“IOTGtatewayDeviceId”进行 TwoWay 或 OneWayToSource 绑定。” 这个异常是由于在进行数据绑定时,尝试将只读属性(IOTGtatewayDeviceId)设置为双向(TwoWay)或者从目标到源(OneWayToSource)的绑

    2024年02月04日
    浏览(28)
  • WPF绑定之道:为何选择属性而非字段,提升灵活性与可控性

      概述: WPF支持绑定到对象的属性而不是字段,主要因为属性提供了更多控制和扩展性。属性包含get和set方法,支持数据验证和通知属性更改,而字段通常被认为是内部实现。使用属性使WPF能够更灵活、可控地与数据交互,提高代码的可读性和可维护性。 WPF(Windows Presenta

    2024年03月25日
    浏览(31)
  • WPF多值转换器

    背景:实现Slider拖动可以调整rgb 单转换器:WPF中数据绑定转换器Converter-CSDN博客 在View中:         -- Fill中绑定的资源是Window.Resources中引入进来的转换器key         -- 转换器返回的是一个SolidBrush,其实就是相当于在这个地方写个SolidBrush         -- 这里绑定的是Slider的值,

    2024年01月23日
    浏览(25)
  • 脉冲触发的触发器(主从触发器)

    脉冲触发的动作特点: (1)触发器的翻转分两步动作。 第一步:当CLK以高电平为有效信号时,在CLK= 1期间主触发器接收输入端(S、R或J、K)的信号,被置成相应的状态,而从触发器不动。 第二步: CLK下降沿到来时从触发器按照主触发器的状态翻转,所以Q、Q’端状态的改变发生在

    2024年02月04日
    浏览(34)
  • 【FGPA】Verilog:JK 触发器 | D 触发器 | T 触发器 | D 触发器的实现

    0x00 JK 触发器 JK 触发器是 RS 触发器和 T 触发器的组合,有两个输入端 J 和 K,如果两个输入端都等于 1,则将当前值反转。 行为表

    2024年02月05日
    浏览(33)
  • 数据库触发器简介——修改数据的触发器、删除数据的触发器

    修改数据的触发器 更新数据 思考下面这个触发器会触发几次?几条数据就触发几次。

    2024年02月15日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包