You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中获取XAML Toggle Switch值并同步多个开关状态

XAML开关双向同步实现方案

获取开关的布尔状态

你定义的Switch控件的IsToggled属性本身就是布尔类型,有两种获取方式:

  • 直接通过控件名访问:bool currentState = toggleSwitch1.IsToggled
  • 在Toggled事件回调中通过事件参数获取:bool currentState = e.Value

示例事件代码:

private void OnToggled(object sender, ToggledEventArgs e)
{
    bool toggleState = e.Value; // 直接拿到bool类型的开关状态
}

跨文件同步另一个开关状态

由于两个开关位于不同文件,推荐以下两种实现方式:

方案1:静态全局状态同步(轻量易实现)

  1. 先定义静态全局状态类,统一管理开关状态并通知变更:
public static class SharedSwitchState
{
    private static bool _isToggled = true;
    public static bool IsToggled
    {
        get => _isToggled;
        set
        {
            if (_isToggled == value) return;
            _isToggled = value;
            StateChanged?.Invoke(null, value);
        }
    }
    // 状态变更通知事件
    public static event EventHandler<bool> StateChanged;
}
  1. 两个开关所在的页面都订阅状态变更事件,开关切换时更新全局状态:
// 页面构造函数中添加订阅
public YourPage()
{
    InitializeComponent();
    SharedSwitchState.StateChanged += (sender, newState) =>
    {
        // 避免状态一致时重复触发事件
        if (toggleSwitch1.IsToggled != newState)
        {
            toggleSwitch1.IsToggled = newState;
        }
    };
}

// 开关Toggled事件处理
private void OnToggled(object sender, ToggledEventArgs e)
{
    SharedSwitchState.IsToggled = e.Value;
}

另一个开关所在页面的逻辑完全一致,即可实现双向同步。

方案2:MVVM绑定(适合已有MVVM架构的项目)

定义全局单例ViewModel,两个开关都双向绑定同一个属性:

  1. 全局ViewModel代码:
public class GlobalVm : INotifyPropertyChanged
{
    public static GlobalVm Instance { get; } = new GlobalVm();
    private bool _isToggled = true;
    public bool IsToggled
    {
        get => _isToggled;
        set
        {
            _isToggled = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}
  1. 两个开关的XAML都修改为绑定该属性:
<Switch Grid.Column="1" IsToggled="{Binding Source={x:Static local:GlobalVm.Instance}, Path=IsToggled, Mode=TwoWay}"/>

无需额外编写事件处理代码即可自动实现双向同步。


内容的提问来源于stack exchange,提问作者JM Wesierski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:36:03