我有一个TextBlock如下:
<TextBlock Text="You don't have any more items." Visibility="{binding}"
在我后面的代码中我定义了一个名为items的Stack,如下所示:
private Stack<Item> _items;
当_item.Any为false时,如何将xaml中的文本可见性绑定到可见?
答案 0 :(得分:1)
实现您想要做的事情有几个步骤,所有这些步骤都被描述为here
您需要创建一个类似于此的值转换器;
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();
}
}
然后你需要在xaml的资源字典中添加对is的引用,就像这样;
<views:EmptyCollectionToVisibilityConverter x:Key="EmptyCollectionToVisibilityConverter"/>
最后将视图模型中的属性绑定到控件的可见性,并像这样绑定转换器;
Visibility="{Binding Items, Converter={StaticResource EmptyCollectionToVisibilityConverter}}"
你的属性可能需要是一个observableCollection(这意味着要改变我稍微给你的值转换器示例。
答案 1 :(得分:0)
我可能会选择:
private Stack<Item> _items;
// bind to this property using converter
public bool IsVisible => !(_items?.Any(...) ?? false);
您不应直接公开_stack
,例如使用方法做某事(因为每次推/弹项目时都需要提高通知):
public void PushItem(Item item)
{
_items.Push(item);
OnPropertyChanged(nameof(IsVisible)); // implement INotifyPropertyChanged
}