C# 将文本块的可见性属性绑定到堆栈。任何

C# 将文本块的可见性属性绑定到堆栈。任何,c#,xaml,C#,Xaml,我有一个文本块,如下所示: <TextBlock Text="You don't have any more items." Visibility="{binding}" private Stack<Item> _items; 我可能会选择: private Stack<Item> _items; // bind to this property using converter public bool IsVisible => !(_items?.Any(

我有一个文本块,如下所示:

<TextBlock Text="You don't have any more items." Visibility="{binding}"
private Stack<Item> _items;
我可能会选择:

private Stack<Item> _items;
// bind to this property using converter
public bool IsVisible => !(_items?.Any(...) ?? false);

要实现您想要做的事情,有几个步骤,这些步骤都有描述

您需要创建一个与此类似的值转换器

public class EmptyCollectionToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var collection = (Stack<int>) value;
        return collection.Any() ? Visibility.Visible : Visibility.Collapsed;
    }

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

您的属性可能需要是一个observableCollection(这将意味着稍微更改我给您的值转换器示例。

那么IsVisible的xaml绑定sytax是什么?@iamsharp。如果您不关心MVVM原则,那么您可以简单地使用
Visibility
类型或
bool
(返回
Visibility.Visible
而不是
true
,例如
Visibility.Collapsed
否则)。在这种情况下,您不需要转换器。注意:转换器意味着可重复使用,如果您正在制作其他地方未使用的转换器,则您选择了次优解决方案。我想我可能会坚持使用textBlock.Visibility=Visibility.Visible在调用pop后进行设置,并在调用push后将其折叠。我认为xaml绑定I’我会提供一个更好、更简单的解决方案,但我错了。谢谢你的解决方案
public class EmptyCollectionToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var collection = (Stack<int>) value;
        return collection.Any() ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
 <views:EmptyCollectionToVisibilityConverter x:Key="EmptyCollectionToVisibilityConverter"/>
Visibility="{Binding Items, Converter={StaticResource EmptyCollectionToVisibilityConverter}}"