用于条件计数的Xaml绑定
本文关键字:Xaml 绑定 条件 用于 | 更新日期: 2023-09-27 18:07:23
我正在为应用程序创建一个基本的XX/YY控件,总数很容易,但是我有问题计数XX是基于一个条件…
<StackPanel Orientation="Horizontal" Height="55" Width="130" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="00" FontSize="40" Margin="5,0,5,5" />
<TextBlock Text="/" FontSize="40" Margin="5,0,5,5"/>
<TextBlock Text="{Binding ItemList.Count, StringFormat={}{0:00}}" FontSize="40" Margin="5,0,5,5"/>
</StackPanel>
第一个textBlock应该是ItemList中propertyX = 1的总数
我该如何为第一个文本块设置上面的绑定?
您应该使用转换器来获取计数。
public class ConditionalCountConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var output = 0;
var collection = value as IEnumerable<MyConnectable>();
if(collection != null)
{
output = collection.Count(i => i.connectionStatus == 1);
}
return output;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
并在XAML中引用它,如下所示:
<UserControl xmlns:converters="clr-namespace:YourNamespaceNameGoesHere">
<UserControl.Resources>
<ResourceDictionary>
<converters:ConditionalCountConverter x:Key="CountConverter" />
</ResourceDictionary>
</UserControl .Resources>
<TextBlock Text="{Binding ItemList, Converter={StaticResource CountConverter}}" />
</UserControl>
您可以在这里找到有关转换器的更多信息。
这样做是创建一个可以被XAML访问的转换器对象的实例。然后,当这个字段是renderer并且执行绑定时,它将绑定的对象传递给转换器的Convert
方法,并使用结果而不是绑定到的对象。这是非常强大的!享受。
作为一些补充信息,我个人认为这是对转换器的"欺骗"使用,因为您只实现了它的一半。一般来说,你的Convert
方法的结果应该能够直接传递到你的ConvertBack
方法中,并转换成它派生的源对象。这并不总是必要的;在本例中,我们将结果发送到一个仅显示的字段。但如果你要在网格或某种可编辑控件中拥有这个对象,你可能希望将它实现为双向的,以便用户可以更新转换后的值,并在后端发生适当的事情。