WPF MVVM Light启用按钮(如果选择了数据网格行)

JTe*_*ter 2 wpf datagrid button wpf-controls mvvm-light

我似乎在任何地方都找不到直接的答案。我有一个要禁用的按钮,直到选中了DataGrid行。哪一行都没关系。取消选择后,我希望再次禁用它。

pus*_*raj 5

干得好

<StackPanel>
    <DataGrid x:Name="dGrid">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding}"
                                Header="A Column" />
        </DataGrid.Columns>
        <sys:String>item 1</sys:String>
        <sys:String>item 2</sys:String>
        <sys:String>item 3</sys:String>
        <sys:String>item 4</sys:String>
    </DataGrid>
    <Button x:Name="button"
            Content="A Button">
        <Button.Style>
            <Style TargetType="Button">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding SelectedItems.Count,ElementName=dGrid}"
                                 Value="0">
                        <Setter Property="IsEnabled"
                                Value="False" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
    </Button>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

上面的示例将在SelectedItems.CountDataGrid 上放置触发器,如果按钮为零,则将禁用按钮

这是纯xaml解决方案,转换器或vm属性也可以使用其他解决方案


编辑

按照此处的要求是不使用Name属性即可执行此操作的示例

<StackPanel>
    <DataGrid>
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding}"
                                Header="A Column" />
        </DataGrid.Columns>
        <sys:String>item 1</sys:String>
        <sys:String>item 2</sys:String>
    </DataGrid>
    <Button Content="A Button">
        <Button.Style>
            <Style TargetType="Button">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Parent.Children[0].SelectedItems.Count,RelativeSource={RelativeSource Self}}"
                                 Value="0">
                        <Setter Property="IsEnabled"
                                Value="False" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
        </Button>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

上面的代码假定datagrid是父容器的第一个子容器Parent.Children[0],您可以根据需要进行调整。


小智 5

仅使用WPF提供的将int自动评估为bool会容易得多:

IsEnabled="{Binding ElementName=YourDataGrid, Path=SelectedItems.Count}"
Run Code Online (Sandbox Code Playgroud)