【问题标题】:UWP IsNullOrEmptyStateTrigger not working for ListViewUWP IsNullOrEmptyStateTrigger 不适用于 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>

【问题讨论】:

    标签: uwp uwp-xaml


    【解决方案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}" />
    

    【讨论】:

      猜你喜欢
      • 2017-01-15
      • 2019-11-02
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 2020-08-12
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      相关资源
      最近更新 更多