【问题标题】:Update appbar context based on listviewitem clicked根据点击的 listviewitem 更新 appbar 上下文
【发布时间】:2013-12-11 13:13:33
【问题描述】:

如何根据屏幕上点击的内容更改应用栏中按钮的上下文?

在我的场景中,我为不同的对象(例如用户/项目等)提供了各种数据绑定列表视图,应用栏包含简单的添加/删除/编辑按钮。我希望能够根据我在屏幕上单击的内容来执行这些任务。

【问题讨论】:

    标签: c# xaml visual-studio-2012 windows-8 winrt-xaml


    【解决方案1】:

    请记住,当您编写 XAML 应用程序时,最好使用的设计模式是 MVVM 模式,因为它非常简单。包括你的场景。

    首先,您的ListView 有一个SelectedItem 属性,该属性会在用户更改其选择时更新。您应该将此绑定到视图模型中的 INotifyPropertyChanged 属性;让我们假设它被称为Selected,并确保在设置绑定时它使用的是Mode=TwoWay

    此外,在您的视图模型中,除了Selected,您还应该包括INotifyPropertyChanged 属性,如Button1VisibilityButton2Visibility,您将从Selected 设置器代码中更新它们。 AppBar 中的按钮的可见性应该分别绑定到视图模型的 Button1VisibilityButton1Visibility 属性。

    然后,当用户更改选择时,您在Selected 设置器代码中实现的逻辑将在您的视图模型中适当地设置Visibility 属性。然后,您的AppBar 中的按钮就会相应地出现和隐藏。这有意义吗?

    类似的东西

    public abstract class BindableBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        protected void SetProperty<T>(ref T storage, T value, [System.Runtime.CompilerServices.CallerMemberName] String propertyName = null)
        {
            if (!object.Equals(storage, value))
            {
                storage = value;
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    
    public class ViewModel : BindableBase
    {
        object _Selected = default(object);
        public object Selected
        {
            get { return _Selected; }
            set
            {
                base.SetProperty(ref _Selected, value);
                if (value == null)
                    this.Button1Visibility = this.Button2Visibility = Visibility.Collapsed;
                else
                    this.Button1Visibility = this.Button2Visibility = Visibility.Visible;
            }
        }
    
        Visibility _Button1Visibility = default(Visibility);
        public Visibility Button1Visibility { get { return _Button1Visibility; } set { base.SetProperty(ref _Button1Visibility, value); } }
    
        Visibility _Button2Visibility = default(Visibility);
        public Visibility Button2Visibility { get { return _Button2Visibility; } set { base.SetProperty(ref _Button2Visibility, value); } }
    }
    

    以上面的代码为例,我们在未选择任何内容时隐藏按钮。

    祝你好运!

    【讨论】:

      【解决方案2】:

      我这样做的方法是在设计时将所有上下文按钮放入应用程序栏中。然后,我根据用户单击的项目显示或隐藏正确的项目。

      具体来说,我的应用程序侦听SelectionChanged 事件,然后在相应的应用栏按钮上设置Visibility 属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-11
        • 1970-01-01
        • 1970-01-01
        • 2020-05-13
        • 1970-01-01
        • 2016-12-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多