我在單獨的檔案中有兩個 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 檔案?
uj5u.com熱心網友回復:
使用 C# 如何從 xaml 回傳切換開關的值
您可以使用多種方法來實作這一點。
1.使用事件Toggled的Switch 如你所說。
可以參考以下代碼:
private void OnToggled(object sender, ToggledEventArgs e)
{
Switch mySwitch1 = (Switch)sender;
if (mySwitch1.IsToggled)
{
Console.WriteLine("Toggled on" );
}
else
{
Console.WriteLine("Toggled off");
}
}
2.另一種方法是使用系結方式。
只需為當前頁面(例如TestPage1)創建一個 ViewModel并為 Switch 的SwithOne屬性創建一個欄位(例如)IsToggled。
請參考以下代碼:
創建一個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 void OnToggled(object sender, ToggledEventArgs e)
//{
// Switch mySwitch1 = (Switch)sender;
// if (mySwitch1.IsToggled)
// {
// Console.WriteLine("Toggled on");
// }
// else
// {
// Console.WriteLine("Toggled off");
// }
//}
}
測驗頁1.xaml
<Switch x:Name="toggleSwitch1" IsToggled="{Binding SwithOne}" HorizontalOptions="Center">
</Switch>
<Button Text="navigate" Clicked="Button_Clicked"/>
uj5u.com熱心網友回復:
發送者物件包含事件源,這里是 Switch
void OnToggled(object sender, ToggledEventArgs e)
{
//updateConsentValueForCategory();
var switch = (Switch)sender;
if (switch.IsToggled)
{
Console.WriteLine("Toggled on");
}
else
{
Console.WriteLine("Toggled off");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359512.html
