![](/img/trans.png)
[英]Change MVVM property from storyboard in XAML, after animation completes
[英]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.