使用 C# 如何从 xaml 返回切换开关的值
Posted
技术标签:
【中文标题】使用 C# 如何从 xaml 返回切换开关的值【英文标题】:Using C# how can I return the value of a toggle Switch from xaml 【发布时间】:2021-12-24 05:54:18 【问题描述】:我在单独的文件中有两个 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() 转换为返回类型给了我一个关于 toggleSwitch1 的错误,说需要对象引用,因为它是非静态的。 如何拉取切换值并同步更新另一个 xaml 文件?
【问题讨论】:
在您的问题之间,您所展示的内容并不清楚 我展示的方法只是用于切换的关联 C#。我正在寻找一种与将返回其状态的切换一起使用的方法,甚至可能是另一种获取它并更新不同 xaml 切换的方法 对不起,我不明白你想要什么,Ontoggled 是一个事件,你不能从一个事件中返回值 是的,这是我的问题。那么我将如何编写一个从提供的 xaml 元素返回值的方法呢? 【参考方案1】:使用 C# 如何从 xaml 返回切换开关的值
您可以使用多种方法来实现这一点。
1.使用你提到的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.另一种方法是使用绑定方式。
只需为当前页面创建一个ViewModel(例如TestPage1
)并为Switch的IsToggled
属性创建一个字段(例如SwithOne
)。
请参考以下代码:
创建一个ViewModel
类(例如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"/>
【讨论】:
嗨@JM Wesierski,我已经好几天没有收到你的消息了。如果有什么我可以在这里提供帮助的,请告诉我。 嘿,我没有收到任何错误,但这并没有同步我的切换。我对这条评论的回复有点太长了,所以我提出了一个新问题here。如果您能看一看,我将不胜感激! 我刚刚回答了问题how can I return the value of a toggle Switch from xaml
。如果你想在不同的页面同步切换,我会在你发布的新问题中给出答案。
一个问题,一个线程。如果我的回答对这个问题Using C# how can I return the value of a toggle Switch from xaml
有用,您能否将其标记为已回答,以便帮助其他有类似问题的人。提前致谢。 :)【参考方案2】:
sender 对象包含事件源,这里是 Switch
void OnToggled(object sender, ToggledEventArgs e)
//updateConsentValueForCategory();
var switch = (Switch)sender;
if (switch.IsToggled)
Console.WriteLine("Toggled on");
else
Console.WriteLine("Toggled off");
【讨论】:
以上是关于使用 C# 如何从 xaml 返回切换开关的值的主要内容,如果未能解决你的问题,请参考以下文章