gpt4 book ai didi

wpf - 比较 DataTrigger 中的两个动态值

转载 作者:行者123 更新时间:2023-12-01 23:00:54 26 4
gpt4 key购买 nike

我想比较两个动态值 User_iduser_id 是否相等并设置一个属性 Cursor。另外,当光标在手上时,我必须执行一个功能。怎么做?这是我正在使用的代码:

<DataTrigger Binding="{Binding Path=User_id}" Value="{Binding Path=user_id}">
<Setter Property="Cursor" Value="Hand"/>
</DataTrigger>

最佳答案

有几个选项可以解决这个问题。

#1。多重绑定(bind)转换器

您可以使用多重绑定(bind)将两个值输入到IMultiValueConverter中。要在 DataTrigger 中使用这种类型的绑定(bind),您需要遵循以下语法。

<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding>
<MultiBinding.Converter>
<local:EqualityConverter />
</MultiBinding.Converter>
<Binding Path="User_id" />
<Binding Path="user_id" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Window.Cursor" Value="Hand"/>
</DataTrigger>

MultiBinding.Converter 设置为 EqualityConverter 的新实例,它是我创建的一个实现 IMultiValueConverter 接口(interface)的类。本类(class)将为您进行比较。当此转换器返回 true 时,DataTrigger 将触发。

public class EqualityConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values.Length < 2)
return false;

return values[0].Equals(values[1]);

}

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

#2。 MVVM 模式

我不确定您的 DataContext 来自哪里,但如果可能的话,您可能需要考虑使用 View 模型进行绑定(bind)。 View 模型可以公开一个为您进行相等比较的属性。像这样的东西。

   public class UserViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

private int _User_id;
private int _user_id;

public int User_id
{
get
{
return _User_id;
}
set
{
if (_User_id != value)
{
_User_id = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("User_id"));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("IsUserIdsEqual"));
DoSomething();
}
}
}
public int user_id
{
get
{
return _user_id;
}
set
{
if (_user_id != value)
{
_user_id = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("user_id"));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("IsUserIdsEqual"));
DoSomething();
}
}
}

public bool IsUserIdsEqual
{
get { return _user_id == _User_id; }
}

private void DoSomething()
{
if (this.IsUserIdsEqual)
{
//Do something when they are equal.
}
}

}

如果使用这样的 View 模型,您的 DataTrigger 可以简化为..

<DataTrigger Binding="{Binding Path=IsUserIdsEqual}" Value="True">
<Setter Property="Window.Cursor" Value="Hand"/>
</DataTrigger>

关于在触发器上执行函数,我添加了一个 DoSomething 方法来突出显示当两个 ID 相等时如何使用 View 模型来执行函数。我不确定这是否适合您的情况,因为我不确定函数调用的目的是什么,但它是一种在条件发生变化时执行函数的方法。

关于wpf - 比较 DataTrigger 中的两个动态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37302270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com