如何编写返回OF XAML切换开关的值的方法?

How can I write a method that returns the value of a of xaml toggle switch?(如何编写返回OF XAML切换开关的值的方法?)
本文介绍了如何编写返回OF XAML切换开关的值的方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在单独的文件中有两个XAML切换,我希望同时更新它们(如果打开了一个,那么另一个也应该打开(反之亦然)。我在XAML中的第一个开关是:

<Switch Grid.Column="1" x:Name="toggleSwitch1" IsToggled="true" Toggled="OnToggled"/>
使用C#如何返回此开关的布尔值,以便可以同时更新另一个开关?那么,一旦检索到该值,我如何更新另一个交换机的切换状态的XAML?

推荐答案

您的Switch控制意味着您使用了uwp,但我不确定。

无论如何,我们的想法是将两个控件IsToggled属性绑定到某些ViewModel的相同属性:

using System.ComponentModel;
using System.Runtime.CompilerServices;

namespace MyWPFApp
{
    public class ControlsViewModel : INotifyPropertyChanged
    {
        private bool switchToggled;
        public bool SwitchToggled
        {
            get => switchToggled;
            set
            {
                switchToggled = value;
                OnPropertyChanged(nameof(SwitchToggled));
            }
        }

        public ControlsViewModel() { }

        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged([CallerMemberName]string propertyName = "") => 
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

然后在WindowWindowWindowXAML中将绑定设置为Switch控件(在我的示例中-CheckBox控件):

<!-- Window 1 -->
<Window x:Class="MyWPFApp.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MyWPFApp"
        mc:Ignorable="d"
        Title="Window 1" Height="100" Width="300">
    <Grid>
        <CheckBox Content="Window1 CheckBox"
                  IsChecked="{Binding SwitchToggled}"/>
                  <!-- Replace IsChecked to IsToggled property -->
    </Grid>
</Window>

<!-- Window 2 -->
<Window x:Class="MyWPFApp.Window2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:MyWPFApp"
        mc:Ignorable="d"
        Title="Window 2" Height="100" Width="300">
    <Grid>
        <CheckBox Content="Window2 CheckBox" 
                  IsChecked="{Binding SwitchToggled}"/>
                  <!-- Replace IsChecked to IsToggled property -->
    </Grid>
</Window>

示例中两个Window代码隐藏相同:

using System.Windows;

namespace MyWPFApp
{
    public partial class Window1 : Window // or public partial class Window2
    {
        public Window1(ControlsViewModel cvm) // or public Window2
        {
            InitializeComponent();
            DataContext = cvm;
        }
    }
}
当从主实例调用示例Windowtoshow时,您创建了ControlsViewModel实例并将其传递给这两个实例:
using System.Windows;

namespace MyWPFApp
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            var cvm = new ControlsViewModel();

            new Window1(cvm).Show();
            new Window2(cvm).Show();
        }
    }
}

因此选中/取消选中(切换/取消切换)其中一个将影响另一个,反之亦然。此外,您可以在某个地方更改SwitchToggled代码,这也会影响两个控件。

请注意,这只是一个示例,试图解释这一想法。有关MVVM模式的更多说明和示例,请访问MSDN。

这篇关于如何编写返回OF XAML切换开关的值的方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)