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}}"