XAML 一个切换按钮控制另一个切换按钮

bakd9h0s  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(170)

我有五个切换按钮
当按下第一个切换按钮时,应检查所有剩余的切换按钮
第一个切换按钮xaml写道:

<ToggleButton VerticalAlignment="Center" Width="230" Height="95" Command="{Binding Path=AllCommand}" CommandParameter="All" Style="{StaticResource ButtonStyle.AllButtonStyle}">
<TextBlock Text="full agreement" />
</ToggleButton>

其余的toglebutton xaml写道:
第一次
所有切换按钮样式都与代码中的样式相同
当我按下第一个切换按钮时,如何检查另一个切换按钮?
急需帮助

bybem2ql

bybem2ql1#

对我上面的评论做了一点修改。希望这对你有用。你可以尝试类似下面的方法。基本上,这为切换按钮列表和切换按钮本身创建了一个视图模型。每个切换按钮的命令都绑定到ItemsControl的datacontext上的命令,而不是ItemsSource上的命令。然后,该命令调用一个服务,当按钮被修改时(例如:主视图模型订阅该事件,以便它可以从服务中拉取修改后的视图模型。

查看

<ItemsControl ItemsSource = "{binding Buttons}">
    <ItemsControl.ItemTemplate>
        <ToggleButton IsChecked = "{binding IsChecked}"
                        Text = "{binding ButtonText}"
                        IsChecked = "{binding Path=DataContext.ButtonClickedCommand}"/>
    </ItemsControl.ItemTemplate>
</ItemsControl>

按钮视图模型

public class ButtonViewModel : ViewModelBase
{
    private string buttonText;
    public int ButtonText
    {
        get => buttonText;
        set 
        { 
            myVar = value; 
            OnPropertyChanged(nameof(ButtonText));
        }
    }
    
    private bool isChecked;
    public bool IsChecked
    {
        get => isChecked;
        set 
        { 
            isChecked = value;
            OnPropertyChanged(nameof(IsChecked)) 
        }
    }
}

主视图模型

public class ListViewModel : ViewModelBase
{
    public ObservableCollection<ButtonViewModel> Buttons { get; set; }

    public ICommand ButtonClickedCommand;

    private readonly ToggleButtonService buttonService;

    public ListViewModel()
    {
        buttonService = new ToggleButtonClickedCommand(Buttons);
        buttonService.ButtonChecked =+ UpdateButtons
        ButtonClickedCommand = new ToggleButtonClickedCommand(buttonService);
    }

    private void UpdateButtons()
    {
        Buttons = buttonService.Buttons;
    }

}

切换按钮服务

public class ToggleButtonService
{

    private IEnumerable<ButtonViewModel> buttonViewModels;
    public IEnumerable<ButtonViewModel> ButtonViewModels
    {
        get { return buttons; }
        set 
        { 
            buttonViewModels = value;
            ButtonsChecked?.Invoke(); 
        }
    }
    
    public event Action ButtonChecked;

    public ToggleButtonService(IEnumerable<ButtonViewModel> buttons)
    {
        buttonViewModels = buttons;
    }

    public void SelectOrUnSelectAllButtons()
    {
        List<ButtonViewModel> Buttons = new List<ButtonViewModel>(ButtonViewModels);
        foreach(button in Buttons)
        {
            button.IsChecked = !button.IsChecked;
        }

        ButtonViewModels = Buttons;
    }
}

切换按钮单击命令

public class ToggleButtonClickedCommand : ICommand
{
    private readonly ToggleButtonService ButtonService;

    public ToggleBUttonClickedCommand(ToggleButtonService buttonService)
    {
        ButtonService = buttonService;
    }

    public event EventHandler? CanExecuteChanged;

    public bool CanExecute(object? parameter)
    {
        return true;
    }

    public async void Execute(object? parameter)
    {
        ButonService.SelectOrUnSelectAllButtons();
    }
}

相关问题