UWP IsNullOrEmptyStateTrigger 不适用于 ListView
Posted
技术标签:
【中文标题】UWP IsNullOrEmptyStateTrigger 不适用于 ListView【英文标题】:UWP IsNullOrEmptyStateTrigger not working for ListView 【发布时间】:2022-01-08 11:54:33 【问题描述】:下面的 XAML 适用于使用 VisualStateManager 和来自 Microsoft.Toolkit.Uwp.UI 包的 IsNullOrEmptyStateTrigger
的 UWP 应用。当没有从 ListView 中选择任何项目时,触发器应该禁用按钮。但是,该按钮始终保持启用状态。
ListView 的SelectedItem
在列表中没有选择任何内容时应该为空(首次运行应用程序时没有选择任何内容)。有什么想法吗?
我的代码大致基于this example。
<Page
x:Class="UwpTriggerDemo.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:UwpTriggerDemo"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:triggers="using:Microsoft.Toolkit.Uwp.UI.Triggers"
mc:Ignorable="d"
Background="ThemeResource ApplicationPageBackgroundThemeBrush">
<StackPanel>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ListViewStates">
<VisualState x:Name="ListSomethingSelectedState" />
<VisualState x:Name="ListNothingSelectedState">
<VisualState.StateTriggers>
<triggers:IsNullOrEmptyStateTrigger Value="Binding SelectedItem,
ElementName=myListView, Mode=OneWay"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="myButton.IsEnabled" Value="False" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<ListView x:Name="myListView">
<TextBlock Text="Item 1" />
<TextBlock Text="Item 2" />
<TextBlock Text="Item 3" />
</ListView>
<Button x:Name="myButton" Content="Click Me" />
</StackPanel>
</Page>
【问题讨论】:
【参考方案1】:UWP IsNullOrEmptyStateTrigger 不适用于 ListView
我们可以重现您的问题,请随时在WindowsCommunityToolkit
问题框中发布此问题。目前,这是一种手动控制 myButton 状态的解决方法。在后面的代码中创建IsEnable
属性并将其绑定到 myButton。并更新 SelectItem
设置方法中的 IsEnable 值。更多内容请参考以下代码。
private bool _isEnable;
public bool IsEnable
get
return _isEnable;
set
_isEnable = value;
OnPropertyChanged();
private string _selectItem;
public string SelectItem
get
return _selectItem;
set
_selectItem = value;
if(_selectItem == null)
IsEnable = false;
else
IsEnable = true;
OnPropertyChanged();
Xaml
<ListView
x:Name="myListView"
IsItemClickEnabled="True"
SelectedItem="Binding SelectItem, Mode=TwoWay">
<x:String>Hello</x:String>
<x:String>Hello</x:String>
<x:String>Hello</x:String>
<x:String>Hello</x:String>
</ListView>
<Button
x:Name="myButton"
Content="Click Me"
IsEnabled="Binding IsEnable" />
【讨论】:
以上是关于UWP IsNullOrEmptyStateTrigger 不适用于 ListView的主要内容,如果未能解决你的问题,请参考以下文章
2019-11-25-加强版在国内分发-UWP-应用正确方式-通过win32安装UWP应用
为啥必须在 UWP 中使用 StreamSocketListener 而不是 TcpListener,尽管 UWP 是 .NET Core 的子集,而 TcpListener 在 UWP 中可用?
UWP使用AppService向另一个UWP客户端应用程序提供服务