簡體   English   中英

如何使用MVVM從其他xaml頁面進行屬性更改?

[英]How can I make a property change from a different xaml Page with the use of MVVM?

我是MVVM的新手。 我有兩個xaml頁面。 除非已單擊第一頁(“簡介”頁)中的按鈕,否則無法訪問第二個(“鎖定”)。 我怎樣才能做到這一點?

鎖定頁面具有此代碼。

<Frame Grid.Row="0" Grid.Column="1" BackgroundColor="LightGray" IsVisible="{Binding LockPage}">
                <Frame.GestureRecognizers>
                    <TapGestureRecognizer Tapped="Tap_Lock" />
                </Frame.GestureRecognizers>
                <Label Text="Locked"/>
            </Frame>

“簡介”頁面包含此代碼。

<StackLayout>
        <Label Text="This is only a simple Introduction Text."/>
        <Label Text=""/>
        <Button Text="Lets Go!!" Command="{Binding UnlockPageCommand}" Clicked="Tap_Next"/>
</StackLayout>

這是類LockModule.cs

 public class LockModule : INotifyPropertyChanged
{

    public LockModule()
    {
        UnlockPageCommand = new Command(UnlockPage);
    }

    bool lockPage = true;
    public event PropertyChangedEventHandler PropertyChanged;

    void OnPropertyChanged(string lockpage)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(lockpage));
    }

    public bool LockPage
    {
        get { return lockPage; }
        set
        {
                lockPage = value;

            OnPropertyChanged(nameof(LockPage));
        }
    }

    public Command UnlockPageCommand { get; }

    void UnlockPage()
    {
        if (lockPage == true)
        {
            lockPage = false;
        }
        else
        {
            lockPage = true;
        }
        OnPropertyChanged(nameof(LockPage));
    }
}

而且不起作用......

我假設您的兩個頁面都綁定到您的LockModule ViewModel的相同實例,至少我在您提供的代碼中看到的第一個錯誤是UnlockPage()方法未設置正確的變量。 這將阻止OnPropertyChanged觸發,並使綁定保持自動更新。 您的命令方法至少應該是這樣的:

void UnlockPage()
{
    if (lockPage == true)
    {
        LockPage = false;
    }
    else
    {
        LockPage = true;
    }
    OnPropertyChanged(nameof(LockPage));
}

在兩個視圖模型之間進行通信的一種方式是跨視圖模型使用相同對象的相同實例。

否則在viewmodels庫中具有LockPage屬性。

但是我建議您將這樣的值存儲在應用程序的共享首選項即應用程序設置中。 您可以使用此插件來簡化應用設置的生活。 參考鏈接: https : //github.com/jamesmontemagno/SettingsPlugin/blob/master/README.md

最后一個選擇是考慮使用消息傳遞中心在頁面之間進行通信並將值傳遞給視圖模型。 參考: https : //docs.microsoft.com/zh-cn/xamarin/xamarin-forms/app-fundamentals/messaging-center

但是,最簡單,最有效的方法是,更新第一頁上的lock的值,然后通過導航參數將其傳遞給第二頁。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM