我的Vmodel中有一个int值:
public int MaxTagCount => URLsCount.Max(tag => tag.Count);
我需要将此MaxTagCount
与Trigger连接:
<DataTrigger Binding="{Binding Count}" Value="1149">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="Green"/>
</DataTrigger>
如何将“1149”替换为MaxTagCount
?
答案 0 :(得分:1)
如果我理解正确,您正在寻找一种方法将Value
的{{1}}绑定到您的DataTrigger
财产,由于这一事实,这是不可能的MaxTagCount
不是依赖属性。
最常见的解决方法是将Value
属性和MaxTagCount
属性都传递给Count
,转换器将比较这两个值并返回true或false。现在MultiValueConverter
的作用是检查转换器返回的值:
首先,定义一个比较两个值的基本转换器,如下所示:
DataTrigger
第二次,更新public class CompareValuesConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return values?[0].Equals(values[1]);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
以检查转换器的返回值,并将值传递给转换器,并相应地设置样式:
DataTrigger
请注意,我使用<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding >
<MultiBinding.Converter>
<local:CompareValuesConverter/>
</MultiBinding.Converter>
<Binding Path="Count" />
<Binding Path="DataContext.MaxTagCount" ElementName="Main"/>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="Green"/>
</DataTrigger>
绑定来获取ElementName
值,因为它(很可能)在全局UI MaxTagCount
上定义(在这种情况下,主窗口是命名的DataContext
),您也可以使用Main
绑定。
答案 1 :(得分:1)
正如@Elhamer已经解释的那样,你不能绑定到DataTrigger的Value属性,因为它不是依赖属性。
作为使用多转换器的替代方法,您可以向视图模型中添加另一个属性,该属性返回一个bool,指示Count
和MaxTagCount
属性是否相等:
public bool IsMax => Count == MaxCount;
...并绑定到这个:
<DataTrigger Binding="{Binding IsMax}" Value="True">
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Foreground" Value="Green"/>
</DataTrigger>
毕竟,视图模型只不过是视图的模型,这种逻辑在那里实现是完全合理的。