【发布时间】:2013-12-11 13:13:33
【问题描述】:
如何根据屏幕上点击的内容更改应用栏中按钮的上下文?
在我的场景中,我为不同的对象(例如用户/项目等)提供了各种数据绑定列表视图,应用栏包含简单的添加/删除/编辑按钮。我希望能够根据我在屏幕上单击的内容来执行这些任务。
【问题讨论】:
标签: c# xaml visual-studio-2012 windows-8 winrt-xaml
如何根据屏幕上点击的内容更改应用栏中按钮的上下文?
在我的场景中,我为不同的对象(例如用户/项目等)提供了各种数据绑定列表视图,应用栏包含简单的添加/删除/编辑按钮。我希望能够根据我在屏幕上单击的内容来执行这些任务。
【问题讨论】:
标签: c# xaml visual-studio-2012 windows-8 winrt-xaml
请记住,当您编写 XAML 应用程序时,最好使用的设计模式是 MVVM 模式,因为它非常简单。包括你的场景。
首先,您的ListView 有一个SelectedItem 属性,该属性会在用户更改其选择时更新。您应该将此绑定到视图模型中的 INotifyPropertyChanged 属性;让我们假设它被称为Selected,并确保在设置绑定时它使用的是Mode=TwoWay。
此外,在您的视图模型中,除了Selected,您还应该包括INotifyPropertyChanged 属性,如Button1Visibility 和Button2Visibility,您将从Selected 设置器代码中更新它们。 AppBar 中的按钮的可见性应该分别绑定到视图模型的 Button1Visibility 和 Button1Visibility 属性。
然后,当用户更改选择时,您在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); } }
}
以上面的代码为例,我们在未选择任何内容时隐藏按钮。
祝你好运!
【讨论】:
我这样做的方法是在设计时将所有上下文按钮放入应用程序栏中。然后,我根据用户单击的项目显示或隐藏正确的项目。
具体来说,我的应用程序侦听SelectionChanged 事件,然后在相应的应用栏按钮上设置Visibility 属性。
【讨论】: