【发布时间】:2021-12-29 18:56:34
【问题描述】:
我正在创建一个首选项中心,该中心需要为两个具有相同布尔/切换值的单独切换切换同步更新。我正在使用带有 C# 的 Xamarin 表单。我有一个 ViewModel.cs 文件,例如
namespace XamarinDemoApp
public class MyViewModel : INotifyPropertyChanged
{
private bool swithOne;
public bool SwithOne
{
set
{
if (swithOne != value)
{
swithOne = value;
OnPropertyChanged("SwithOne");
}
}
get
{
return swithOne;
}
}
public MyViewModel()
{
SwithOne = true; // assign a value for `SwithOne `
}
bool SetProperty<T>(ref T storage, T value, [CallerMemberName] string propertyName = null)
{
if (Object.Equals(storage, value))
return false;
storage = value;
OnPropertyChanged(propertyName);
return true;
}
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
}
然后我的 AllowSaleToggleTab.xaml.cs 看起来像
namespace XamarinDemoApp
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class AllowSaleToggleTab : ContentPage
{
MyViewModel myViewModel;
public AllowSaleToggleTab()
{
InitializeComponent();
myViewModel = new MyViewModel();
BindingContext = myViewModel;
}
}
}
另一个切换选项卡是 PC.xaml.cs
namespace XamarinDemoApp
{
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class PC : ContentPage
{
MyViewModel myViewModel;
public PC()
{
InitializeComponent();
Console.WriteLine("PC Initialized");
myViewModel = new MyViewModel();
BindingContext = myViewModel;
}
}
}
最后,我随附的 PC.xaml 和 AllowSaleToggleTab.xaml 文件都有这些元素
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:xamarindemoapp="clr-namespace:XamarinDemoApp" x:DataType="xamarindemoapp:MyViewModel"
x:Class="XamarinDemoApp.AllowSaleToggleTab">
<Switch x:Name="ToggleSwitch1" IsToggled="{Binding SwithOne}"/>
但它们仍然不同步。谁能指出我做错了什么?谢谢
【问题讨论】:
-
每个页面都有自己的虚拟机实例。同一类的多个实例完全相互独立
-
您创建不同的 ViewModel 实例,每个实例用于每个页面。两个页面都应该是单一的。就像我之前对 WPF 的回答一样,我在一个窗口中创建实例,然后将其作为参数传递给其他两个,因此它们使用相同的 ViewModel(此处:stackoverflow.com/questions/69934877/…)
-
啊,这是有道理的,但是我的 XamarinDemoApp.android 包中有一个 MainActivity.cs,我的 XamarinDemoApp 包中有一个 App.xaml.cs 文件。我应该在哪里创建父实例?
-
如果两个页面都在 Forms 项目中,把它放在那里。你也可以使用单例模式,或者创建一个静态类等。有很多方法可以解决这个问题。
标签: c# xaml xamarin.forms xamarin.android toggle