我正在为一个应用程序创建一个基本的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
如何为第一个文本块设置上述绑定的任何想法。
答案 0 :(得分:0)
您应该使用转换器来获取计数。
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>
您可以找到其他information about converters here。
这样做会创建一个可由XAML访问的转换器对象的实例。然后,当此字段为渲染器并执行绑定时,它会将绑定对象传递给转换器Convert
方法,并使用结果而不是绑定的对象。这非常强大!享受。
作为一些补充信息,我个人认为这是一个&#34; cheaty&#34;使用转换器,因为您只实现了一半转换器。通常,您的Convert
方法的结果应该能够直接传递到您的ConvertBack
方法并转换为源自它的源对象。这并不总是必要的;在这种情况下,我们将结果发送到仅显示字段。但是,如果您要将此对象放在网格或某种类型的可编辑控件中,您可能希望将其实现为双向,以便用户可以更新转换后的值,并在后端发生正确的操作。那只是我的两分钱。