JTe*_*ter 2 wpf datagrid button wpf-controls mvvm-light
我似乎在任何地方都找不到直接的答案。我有一个要禁用的按钮,直到选中了DataGrid行。哪一行都没关系。取消选择后,我希望再次禁用它。
干得好
<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)