使用 C# 我如何 return 切换开关的值从 xaml
Using C# how can I return the value of a toggle Switch from xaml
我在单独的文件中有两个 xaml 开关,我想同时更新它们(如果一个打开另一个也应该打开(反之亦然)。我在 xaml 中的第一个开关是:
<Switch Grid.Column="1" x:Name="toggleSwitch1" IsToggled="true" Toggled="OnToggled"/>
使用方法
void OnToggled(object sender, ToggledEventArgs e)
{
//updateConsentValueForCategory();
if (toggleSwitch1.IsToggled)
{
Console.WriteLine("Toggled on");
}
else
{
Console.WriteLine("Toggled off");
}
}
将 OnToggled() 转换为 return 类型会给我一个关于 toggleSwitch1 的错误,说需要对象引用,因为它是非静态的。
我怎样才能拉动切换值并同步更新另一个 xaml 文件?
发送者对象包含事件源,这里是 Switch
void OnToggled(object sender, ToggledEventArgs e)
{
//updateConsentValueForCategory();
var switch = (Switch)sender;
if (switch.IsToggled)
{
Console.WriteLine("Toggled on");
}
else
{
Console.WriteLine("Toggled off");
}
}
Using C# how can I return the value of a toggle Switch from xaml
您可以使用多种方法来实现。
如您所述,1.use Switch
事件 Toggled
。
您可以参考以下代码:
private void OnToggled(object sender, ToggledEventArgs e)
{
Switch mySwitch1 = (Switch)sender;
if (mySwitch1.IsToggled)
{
Console.WriteLine("Toggled on" );
}
else
{
Console.WriteLine("Toggled off");
}
}
2.Another方法是使用绑定方式
只需为当前页面创建一个 ViewModel(例如TestPage1
)并为 Switch 的 属性 IsToggled
创建一个字段(例如 SwithOne
)。
请参考以下代码:
创建一个ViewModel
class(例如MyViewModel.cs
)并创建字段SwithOne
。使ViewModel实现接口INotifyPropertyChanged
。
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;
}
TestPage1.xaml.cs.
public partial class TestPage1 : ContentPage
{
MyViewModel myViewModel;
public TestPage1()
{
InitializeComponent();
myViewModel = new MyViewModel();
BindingContext = myViewModel;
}
private async void Button_Clicked(object sender, EventArgs e)
{
await Navigation.PushModalAsync( new TestPage2(myViewModel.SwithOne));
}
}
TestPage1.xaml
<Switch x:Name="toggleSwitch1" IsToggled="{Binding SwithOne}" HorizontalOptions="Center">
</Switch>
<Button Text="navigate" Clicked="Button_Clicked"/>
我在单独的文件中有两个 xaml 开关,我想同时更新它们(如果一个打开另一个也应该打开(反之亦然)。我在 xaml 中的第一个开关是:
<Switch Grid.Column="1" x:Name="toggleSwitch1" IsToggled="true" Toggled="OnToggled"/>
使用方法
void OnToggled(object sender, ToggledEventArgs e)
{
//updateConsentValueForCategory();
if (toggleSwitch1.IsToggled)
{
Console.WriteLine("Toggled on");
}
else
{
Console.WriteLine("Toggled off");
}
}
将 OnToggled() 转换为 return 类型会给我一个关于 toggleSwitch1 的错误,说需要对象引用,因为它是非静态的。 我怎样才能拉动切换值并同步更新另一个 xaml 文件?
发送者对象包含事件源,这里是 Switch
void OnToggled(object sender, ToggledEventArgs e)
{
//updateConsentValueForCategory();
var switch = (Switch)sender;
if (switch.IsToggled)
{
Console.WriteLine("Toggled on");
}
else
{
Console.WriteLine("Toggled off");
}
}
Using C# how can I return the value of a toggle Switch from xaml
您可以使用多种方法来实现。
如您所述,1.use Switch
事件 Toggled
。
您可以参考以下代码:
private void OnToggled(object sender, ToggledEventArgs e)
{
Switch mySwitch1 = (Switch)sender;
if (mySwitch1.IsToggled)
{
Console.WriteLine("Toggled on" );
}
else
{
Console.WriteLine("Toggled off");
}
}
2.Another方法是使用绑定方式
只需为当前页面创建一个 ViewModel(例如TestPage1
)并为 Switch 的 属性 IsToggled
创建一个字段(例如 SwithOne
)。
请参考以下代码:
创建一个ViewModel
class(例如MyViewModel.cs
)并创建字段SwithOne
。使ViewModel实现接口INotifyPropertyChanged
。
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;
}
TestPage1.xaml.cs.
public partial class TestPage1 : ContentPage
{
MyViewModel myViewModel;
public TestPage1()
{
InitializeComponent();
myViewModel = new MyViewModel();
BindingContext = myViewModel;
}
private async void Button_Clicked(object sender, EventArgs e)
{
await Navigation.PushModalAsync( new TestPage2(myViewModel.SwithOne));
}
}
TestPage1.xaml
<Switch x:Name="toggleSwitch1" IsToggled="{Binding SwithOne}" HorizontalOptions="Center">
</Switch>
<Button Text="navigate" Clicked="Button_Clicked"/>