首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过直接在列表项中设置属性来隐藏/显示数据绑定列表视图中的项

通过直接在列表项中设置属性来隐藏/显示数据绑定列表视图中的项
EN

Stack Overflow用户
提问于 2018-04-18 01:05:26
回答 1查看 224关注 0票数 0

这已经困扰我很长一段时间了。因此,我有一个在其ItemsControl数据模板中显示自定义用户控件(自定义控件)的ListView。因此,基本上,列表项存储在一个控件中,该控件有自己的ViewModel,独立于ListView ViewModel。我的自定义控件有一个文本和一个按钮。单击自定义控件的按钮将显示特定于该控件的列表(此部分工作正常)。我想要实现的功能是单击自定义控件的按钮,并隐藏列表视图(父级)中的所有其他项,然后单击相同的按钮以恢复其他项的可见性。

仅仅在DataTemplate中设置自定义控件的可见性是行不通的,因为我想直接从自定义控件中的Button click事件设置可见性。

在这方面的任何帮助都将非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2018-04-18 01:30:25

假设您有一个想要更改可见性的控件,那么让我们将它绑定到我们类中一个名为IsVisible的字段。

代码语言:javascript
运行
复制
<Button Grid.Column="1" Grid.Row="3" Content="Hide Stuff" Command="{Binding HideStuffCommand}"></Button>
    <ListView Grid.Column="1" Grid.Row="4" ItemsSource="{Binding People}">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsVisible}" Value="Collapsed">
                        <Setter Property="Visibility" Value="Collapsed" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding IsVisible}" Value="Visible">
                        <Setter Property="Visibility" Value="Visible" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ListView.ItemContainerStyle>
        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text="{Binding Name}"></TextBlock>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

我们使用这个类:

代码语言:javascript
运行
复制
public class Person: ViewModelBase
{
    private int _Id;
    public int Id
    {
        get { return _Id; }
        set { this.Set(ref _Id, value); }
    }

    private string _Name;
    public string Name
    {
        get { return _Name; }
        set { this.Set(ref _Name, value); }
    }

    private Visibility _IsVisible;
    public Visibility IsVisible
    {
        get { return _IsVisible; }
        set { this.Set(ref _IsVisible, value); }
    }

    public Person(int id, string name)
    {
        this.Id = id;
        this.Name = name;
        this.IsVisible = Visibility.Visible;
    }
}

我使用的是MVVM Light,所以this.Set会处理更改后的raise属性。

现在你的click事件:

代码语言:javascript
运行
复制
public RelayCommand HideStuffCommand { get; private set; }
    public void HideStuff()
    {
        foreach (var t in People)
        {
            if (t.Id % 2 == 0)
            {
                t.IsVisible = t.IsVisible == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
            }
        }
    }

在你的视图模型构造函数中:

代码语言:javascript
运行
复制
People = new ObservableCollection<Person>();
            People.Add(new Person(1, "Fred"));
            People.Add(new Person(2, "Wilma"));
            People.Add(new Person(3, "Barney"));
            People.Add(new Person(4, "Betty"));

            this.HideStuffCommand = new RelayCommand(HideStuff);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49883747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档