首页 > 其他分享 >MvvmLight中,两个依赖属性的值发生变化时影响第三个控件属性的用法

MvvmLight中,两个依赖属性的值发生变化时影响第三个控件属性的用法

时间:2024-03-18 23:11:06浏览次数:25  
标签:控件 return string object value MvvmLight public 属性

  1. 使用数据绑定配合IValueConverter(值转换器)

创建一个自定义转换器,该转换器接收两个输入值,并根据他们是否相等返回相应的输出值。然后将这个转换器应用到第三个控件的属性上

 1 public class EqualityToTextConverter : IValueConverter
 2 {
 3     public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
 4     {
 5         string value1 = (string)values[0];
 6         string value2 = (string)values[1];
 7 
 8         return value1 == value2 ? "Equal" : "Not Equal"; // 根据需要返回不同的文本
 9     }
10 
11     public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
12     {
13         throw new NotSupportedException("EqualityToTextConverter只支持单向转换");
14     }
15 }

在XAML中使用MultiBinding:

 1 <Window.Resources>
 2     <local:EqualityToTextConverter x:Key="EqualityConverter"/>
 3 </Window.Resources>
 4 
 5 <!-- 假设这两个依赖属性都在同一个ViewModel中 -->
 6 <Grid DataContext="{Binding RelativeSource={RelativeSource Self}}">
 7     <TextBox Text="{Binding Property1}" />
 8     <TextBox Text="{Binding Property2}" />
 9 
10     <!-- 第三个TextBox -->
11     <TextBox>
12         <TextBox.Text>
13             <MultiBinding Converter="{StaticResource EqualityConverter}">
14                 <Binding Path="Property1" />
15                 <Binding Path="Property2" />
16             </MultiBinding>
17         </TextBox.Text>
18     </TextBox>
19 </Grid>

 

使用命令或事件触发逻辑: 在ViewModel中创建一个命令,当两个属性值改变时执行此命令,命令内部比较两个属性并更新第三个TextBox的Text属性。

 1 public class MyViewModel : ViewModelBase
 2 {
 3     private string property1;
 4     public string Property1
 5     {
 6         get { return property1; }
 7         set
 8         {
 9             if (property1 != value)
10             {
11                 property1 = value;
12                 RaisePropertyChanged(nameof(Property1));
13                 CheckEquality();
14             }
15         }
16     }
17 
18     private string property2;
19     public string Property2
20     {
21         get { return property2; }
22         set
23         {
24             if (property2 != value)
25             {
26                 property2 = value;
27                 RaisePropertyChanged(nameof(Property2));
28                 CheckEquality();
29             }
30         }
31     }
32 
33     private void CheckEquality()
34     {
35         if (Property1 != Property2)
36         {
37             ThirdProperty = "Not Equal";
38         }
39         else
40         {
41             ThirdProperty = "Equal";
42         }
43     }
44 
45     private string thirdProperty;
46     public string ThirdProperty
47     {
48         get { return thirdProperty; }
49         set
50         {
51             if (thirdProperty != value)
52             {
53                 thirdProperty = value;
54                 RaisePropertyChanged(nameof(ThirdProperty));
55             }
56         }
57     }
58 }
59 
60 <!-- XAML -->
61 <TextBox Text="{Binding Property1}" />
62 <TextBox Text="{Binding Property2}" />
63 <TextBox Text="{Binding ThirdProperty}" />

 

标签:控件,return,string,object,value,MvvmLight,public,属性
From: https://www.cnblogs.com/davisdabing/p/18081746

相关文章

  • WPF —— TabControl、StackPanel 控件详解
    1TabControl简介表示包含多个项的控件,这些项共享屏幕上的同一空间。TabControl有助于最大程度地减少屏幕空间使用量,同时允许应用程序公开大量数据。 TabControl包含共享同一屏幕空间的多个TabItem对象。一次只能看到TabControl中的一个 TabItem。当用户选择的Tab......
  • WPF —— ListBox控件、GroupBox控件详解
    1、ListBox介绍  ListBox是一个ItemsControl,这意味着它可以包含任何类型的对象的集合(,例如字符串、图像或面板)。  一个ListBox中的多个项是可见的,与仅ComboBox具有所选项可见的项不同,除非IsDropDownOpen属性为true。该SelectionMode属性确定一次是否......
  • 让图片适应标签的CSS object-fit属性
    在实际的项目运行过程中,可能出现运营人员上传的文件与预期的图片尺寸不同的情况,为了解决这一问题可以使用object-fit属性,对嵌入的图像(以及其他替代元素,如视频)做相应的变化,更加精确地控制图像的展示效果,从而满足多样化的设计需求。让图片适应标签的CSSobject-fit属性1......
  • 新人基础笔记css的文本属性及字体样式
    css的字体属性 1.字体系列CSS使用font-family属性定义文本的字体系列。语法:p{font-family:“微软雅黑”;}div{font-family:Arial,“MicrosoftYahei”,"微软雅黑";}各种字体之间必须使用英文状态下的逗号隔开一般情况下,如果有空格隔开的多个单词组成的字体,加引号......
  • 鸿蒙的背景属性
    背景图-backgroundImage属性:.backgroundImage(背景图地址)Text().backgroundImage($r('app.media.flower')),ImageReapeat.XY)背景图平铺方式ImageRepeat:(可省略)Noreapeat:不平铺,默认值X:水平平铺Y:垂直平铺XY:水平垂直均平铺背景图位置-backgroundImagePosition作......
  • Vue+OpenLayers7入门到实战:OpenLayers7创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼
    返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战前言本章介绍如何使用OpenLayers7在地图上创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、大小、文字和按钮等样式。二、依赖和使用"ol":"7.5.2"使用npm安装依赖[email protected]使用Y......
  • OpenLayers6实战,OpenLayers创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、
    专栏目录:OpenLayers实战进阶专栏目录前言本章讲解OpenLayers6如何创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、大小和文字和按钮等自定义样式的功能。二、依赖和使用"ol":"^6.15.1"使用npm安装依赖[email protected]使用Yarn安装依赖yarn......
  • Qt 布局中控件重叠、挤压的解决方法
    问题描述:在QtDesigner中设计布局时,对所有控件使用QGridLayout、QHBoxLayout或QVBoxLayout布局设置。可以正常预览(Preview),但C++编译后,所有控件挤到一起,布局设置失效。问题解析:预览时正常,说明不是Qt的问题,应该与C++代码有关。问题解决:查看与ui关联的代码,发现这个......
  • Qt QTableWidget 设置列宽行高大小的几种方式及其他常用属性设置
    效果:1.列宽、行高自动分配1//列宽自动分配2tableWidget.horizontalHeader().sectionResizeMode(QHeaderView::Stretch)3//行高自动分配4tableWidget.verticalHeader().SectionResizeMode(QHeaderView::Stretch)2.固定值tableWidget.horizontalHeader().SectionResi......
  • 构建高性能网站:基于软件质量属性的综合优化分析
    构建高性能网站:基于软件质量属性的综合优化分析刘梦阳石家庄铁道大学,河北省石家庄市050043摘要:本文以《高性能网站建设指南》为基础,探讨了如何根据软件质量属性的六个一级指标对网站进行综合优化分析。通过分析功能性、可靠性、可用性、效率、可维护性和安全性等方面,提出了一......