如何更改上面页面中的对象

How to make changes to objects in the page above

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

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

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

Frame.Navigate(typeof(Window2));

所以我认为可能是:

Frame.NavigationView.IsEnabled = False

但这无效。

有办法吗?

您不能直接从加载的 page.You 中设置 NavigationView.IsEnabled 可以在视图模型中设置 属性 以与 navigationView.When 的 IsEnabled 绑定,您可以通过以下方式导航新页面Frame.Navigate(),将视图模型传递给新的 page.You 可以在单击按钮时将 属性 设置为 false page.In 这种情况下,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;
}