我想比较两个动态值User_id
和user_id
是否相等,并设置一个属性Cursor
。另外,当光标为手形时,我必须执行一个函数。如何做到这一点?这是我正在使用的代码:
<DataTrigger Binding="{Binding Path=User_id}" Value="{Binding Path=user_id}">
<Setter Property="Cursor" Value="Hand"/>
</DataTrigger>
我想比较两个动态值User_id
和user_id
是否相等,并设置一个属性Cursor
。另外,当光标为手形时,我必须执行一个函数。如何做到这一点?这是我正在使用的代码:
<DataTrigger Binding="{Binding Path=User_id}" Value="{Binding Path=user_id}">
<Setter Property="Cursor" Value="Hand"/>
</DataTrigger>
有几种攻击这个问题的选项。
您可以使用Multibinding
将两个值输入到IMultiValueConverter
中。 要在DataTrigger
中使用此类型的绑定,您需要遵循以下语法。
<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
接口的类。这个类将为您执行比较操作。当此转换器返回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();
}
}
我不确定你的 DataContext
是从哪里来的,但如果可能的话,你可以考虑使用一个视图模型进行绑定。视图模型可以暴露一个属性来为你执行等值比较。就像这样。
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.
}
}
}
如果您使用像这样的视图模型,则您的 DataTrigger
可以简化为...
<DataTrigger Binding="{Binding Path=IsUserIdsEqual}" Value="True">
<Setter Property="Window.Cursor" Value="Hand"/>
</DataTrigger>
关于在触发器上执行函数,我添加了一个DoSomething
方法来突出显示视图模型如何在两个ID相等时使用它来执行函数。我不确定这对您的情况是否有效,因为我不确定函数调用的意图是什么,但这是在条件更改时执行函数的一种方式。
EqualityConverter
应该处理值中的 NULL(value[0]),所以代码应该是return Equals(values[0], values[1]);
- VBWebProfi