【问题标题】:How to make changes to objects in the page above如何更改上面页面中的对象
【发布时间】:2019-08-24 08:25:43
【问题描述】:

我有一个 NavigationView 将页面加载到其关联的框架中。

在加载的页面上有一个按钮,如何使用这个按钮来改变NavigationView的属性。

我知道在框架中更新页面是:

Frame.Navigate(typeof(Window2));

所以我认为它可能是:

Frame.NavigationView.IsEnabled = False

但这是无效的。

有没有办法做到这一点?

【问题讨论】:

  • 定义“无效”。没有编译?抛出异常?跑了,但什么也没发生?
  • 您能否澄清当您说“那不起作用”时发生了什么?这可能有助于解决您的问题。
  • 对不起,因为它只是不是一个有效的命令,但我不知道实现它的正确方法
  • @DSNB:Window2 是“加载页面”吗?FrameNavigationView 是否位于同一个视图/XAML 文件中?请发布您的 XAML。

标签: c# button uwp frame navigationview


【解决方案1】:

您不能直接从加载的页面设置NavigationView.IsEnabled。您可以在视图模型中设置属性以与navigationView 的IsEnabled 绑定。当您通过Frame.Navigate() 导航新页面时,将视图模型传递到新页面。点击页面中的按钮时,可以设置该属性为false,此时navigationView将被禁用。

.xaml:

<NavigationView IsEnabled="{x:Bind MyViewModel.IsEnabled,Mode=OneWay}">
        <NavigationView.MenuItems>
            <NavigationViewItem Content="Item 1"></NavigationViewItem>
        </NavigationView.MenuItems>
        <Frame x:Name="ContentFrame"/>
</NavigationView>

.cs:

public class ViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    private bool isEnabled = false;
    public bool IsEnabled {
        get { return isEnabled; }
        set {
            isEnabled = value;
            OnPropertyChanged();
        }
    }
    public void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
}

public sealed partial class MainPage: Page
{​
    public MainPage()​
    {​
        this.InitializeComponent();​
        MyViewModel = new ViewModel();
    }
    private ViewModel MyViewModel { get; set; }
}

当你想导航一个新页面时,传递视图模型:

ContentFrame.Navigate(typeof(Page1),MyViewModel);

Page1.cs:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    base.OnNavigatedTo(e);
    isEnabledVM = (e.Parameter as ViewModel);
}
private ViewModel isEnabledVM { get; set; }
private async void Button_Click(object sender, RoutedEventArgs e)
{
    isEnabledVM.IsEnabled = false;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多