【问题标题】:WPF ToggleButton and DelegateCommandWPF ToggleButton 和 DelegateCommand
【发布时间】:2011-08-30 02:02:32
【问题描述】:

有没有办法通过DelegateCommands 确定ToggleButton 是否被选中/取消选中?

TIA, 迈克

XAML 代码如下。我正在使用ItemsControl 并绑定到一个集合。我基本上想要一种在单击每个按钮时获取其切换状态的方法。

<ScrollViewer VerticalScrollBarVisibility="Auto">
    <ItemsControl ItemsSource="{Binding Modifiers, Mode=TwoWay}">
        <ItemsControl.Template>
            <ControlTemplate>
                <ScrollViewer ScrollViewer.VerticalScrollBarVisibility="Auto">
                    <WrapPanel Margin="10" Width="{TemplateBinding Width}"
                               Height="{TemplateBinding Height}" 
                               FlowDirection="LeftToRight" IsItemsHost="true">
                    </WrapPanel>
                </ScrollViewer>
            </ControlTemplate>
        </ItemsControl.Template>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <ToggleButton FontSize="18" Opacity="0.8"
                              Command="{Binding DataContext.ModifierToggleCommand, 
                                        RelativeSource={RelativeSource FindAncestor,
                                        AncestorType={x:Type Views:ModifiersView}}}" 
                              CommandParameter="{Binding}" Height="80" Width="200" Margin="5"
                              Content="{Binding Path=ModifierName}" />
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</ScrollViewer>

【问题讨论】:

    标签: wpf togglebutton commandbinding delegatecommand


    【解决方案1】:

    更简单的解决方案是将 IsChecked 属性绑定到 ViewModel 的属性。这样你只需要检查属性值...

    【讨论】:

    • 感谢您的建议,但我的屏幕上有多个切换按钮...而且它们的数量可能不定。
    • 拥有多个按钮如何阻止您将它们绑定到视图模型?它们显然有一些唯一标识符,因此可以用作集合属性的键。
    • 每个ToggleButton对应Modifiers集合中的一个item,所以必须把IsChecked属性放到集合item中。
    【解决方案2】:

    您能否在 XAML 中以声明方式指定 CommandParameter 并使用元素绑定来使用切换的当前值填充该值?

    【讨论】:

    • 嗯......不完全确定你在这里的建议。你能扩展吗?
    • msdn.microsoft.com/en-us/library/ms752308.aspx 提供了命令的概述,ICommandSource 接口为您提供了 CommandParameter,但您可能会发现实现 RoutedCommand(并获取 RoutedEventArgs)更容易/更合适。
    猜你喜欢
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2011-06-25
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多