如果一个集合计数等于另一个,WPF 隐藏 TextBlock
WPF Hide TextBlock if one collection count equal another
你好,
我正在设置 WPF 窗格以根据绑定到 ListView 的多个视图模型集合的值显示一些文本。
文本显示在堆栈面板中,该面板显示集合中的视图数,后跟另一个 TextBlock,如果有隐藏则显示。
这是通过以下绑定计算出来的:
Browser.Count = 这是总浏览量
BrowserItemCollectionView.Count = 这是隐藏的观看次数
基本上,如果 Browser.Count == BrowserItemCollectionView.Count
,我希望文本隐藏
这是XAML代码
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="TotalCount"
Foreground="#FF6F6F6F">
<Run Text="{Binding Path=Browser.Count, Mode=OneWay}" />
<Run Text=" Views" />
</TextBlock>
<TextBlock x:Name="SearchCount"
Foreground="#FF6F6F6F">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=BrowserItemCollectionView.Count, Mode=OneWay}"
Value="---SOME CLEVER BINDING HERE---">
<Setter Property="UIElement.Visibility"
Value="Hidden" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
<Run Text=", ("></Run>
<Run Text="{Binding Path=BrowserItemCollectionView.Count, Mode=OneWay}"></Run>
<Run Text=" visible.)"></Run>
</TextBlock>
</StackPanel>
所以我认为这很容易更改上面的 DataTrigger:
<DataTrigger Binding="{Binding Path=BrowserItemCollectionView.Count, Mode=OneWay}"
Value="{Binding Path=Browser.Count, Mode=OneWay}">
<Setter Property="UIElement.Visibility"
Value="Hidden" />
</DataTrigger>
但这不起作用,因为错误指出无法将值设置为绑定...
最简单的方法是什么?
谢谢。
您可以将 DataTrigger
与 MultiBinding
一起使用。
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource MyCustomConverter}">
<Binding Path="BrowserItemCollectionView.Count" />
<Binding Path="Browser.Count" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="UIElement.Visibility" Value="Hidden" />
</DataTrigger>
绑定到两个属性并使用 MultiValueConverter
检查这些属性的值是否相等。
public class MyCustomConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values.Length != 2)
{
return false;
}
var value1 = values[0];
var value2 = values[1];
return value1.Equals(value2);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
第二个选项是在您的视图模型上创建一个 bool 属性,并在您的视图模型中创建一个逻辑,将 属性 设置为 true/false。绑定到 DataTrigger
.
中的那个 属性
private bool collectionsEqual;
public bool CollectionsEqual
{
get { return collectionsEqual; }
set
{
collectionEqual = value;
OnPropertyChanged()
}
}
...
<DataTrigger Binding="{Binding Path=CollectionsEqual}" Value="True">
<Setter Property="UIElement.Visibility" Value="Hidden" />
</DataTrigger>
你好,
我正在设置 WPF 窗格以根据绑定到 ListView 的多个视图模型集合的值显示一些文本。
文本显示在堆栈面板中,该面板显示集合中的视图数,后跟另一个 TextBlock,如果有隐藏则显示。
这是通过以下绑定计算出来的:
Browser.Count = 这是总浏览量
BrowserItemCollectionView.Count = 这是隐藏的观看次数
基本上,如果 Browser.Count == BrowserItemCollectionView.Count
,我希望文本隐藏这是XAML代码
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="TotalCount"
Foreground="#FF6F6F6F">
<Run Text="{Binding Path=Browser.Count, Mode=OneWay}" />
<Run Text=" Views" />
</TextBlock>
<TextBlock x:Name="SearchCount"
Foreground="#FF6F6F6F">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=BrowserItemCollectionView.Count, Mode=OneWay}"
Value="---SOME CLEVER BINDING HERE---">
<Setter Property="UIElement.Visibility"
Value="Hidden" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
<Run Text=", ("></Run>
<Run Text="{Binding Path=BrowserItemCollectionView.Count, Mode=OneWay}"></Run>
<Run Text=" visible.)"></Run>
</TextBlock>
</StackPanel>
所以我认为这很容易更改上面的 DataTrigger:
<DataTrigger Binding="{Binding Path=BrowserItemCollectionView.Count, Mode=OneWay}"
Value="{Binding Path=Browser.Count, Mode=OneWay}">
<Setter Property="UIElement.Visibility"
Value="Hidden" />
</DataTrigger>
但这不起作用,因为错误指出无法将值设置为绑定...
最简单的方法是什么?
谢谢。
您可以将 DataTrigger
与 MultiBinding
一起使用。
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource MyCustomConverter}">
<Binding Path="BrowserItemCollectionView.Count" />
<Binding Path="Browser.Count" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="UIElement.Visibility" Value="Hidden" />
</DataTrigger>
绑定到两个属性并使用 MultiValueConverter
检查这些属性的值是否相等。
public class MyCustomConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values.Length != 2)
{
return false;
}
var value1 = values[0];
var value2 = values[1];
return value1.Equals(value2);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
第二个选项是在您的视图模型上创建一个 bool 属性,并在您的视图模型中创建一个逻辑,将 属性 设置为 true/false。绑定到 DataTrigger
.
private bool collectionsEqual;
public bool CollectionsEqual
{
get { return collectionsEqual; }
set
{
collectionEqual = value;
OnPropertyChanged()
}
}
...
<DataTrigger Binding="{Binding Path=CollectionsEqual}" Value="True">
<Setter Property="UIElement.Visibility" Value="Hidden" />
</DataTrigger>