在下面的XAML中,command屬性只能正確地與列B一起工作。單擊列A的標題不會調用命令的execute方法。區別在於在列B中,DataGridColumnHeader被顯式實例化。DataGrid.ColumnHeaderStyle和命令綁定
另一方面,風格的第二部分,設置背景基於壓制狀態的觸發器適用於兩列。
爲什麼Command屬性與列B &一起使用而不是列A?
<DataGrid x:Name="Test"
ItemsSource="{Binding Items}"
AutoGenerateColumns="False" >
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Command"
Value="{Binding MyCommand}"/>
<Setter Property="CommandParameter"
Value="{Binding Path=Content, RelativeSource={RelativeSource Self}}"/>
<Style.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTextColumn FontSize="12"
Header="Column A"
Width="200"
Binding="{Binding AData}" />
<DataGridTextColumn FontSize="12"
Width="200"
Binding="{Binding BData}">
<DataGridTextColumn.Header>
<DataGridColumnHeader Content="Column B" />
</DataGridTextColumn.Header
>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
編輯
數據方面:
namespace TestColumnHeaderCommandBinding
{
public class Item
{
public int AData { get; set; }
public string BData { get; set; }
}
public class MyCommand : ICommand
{
#region ICommand Members
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
MessageBox.Show(parameter.ToString() + " clicked");
}
#endregion
}
public class DataContext
{
public DataContext()
{
MyCommand = new TestColumnHeaderCommandBinding.MyCommand();
Items = new List<Item>(5);
Items.Add(new Item { AData = 1, BData = "One" });
Items.Add(new Item { AData = 2, BData = "Two" });
Items.Add(new Item { AData = 3, BData = "Three" });
Items.Add(new Item { AData = 4, BData = "Four" });
Items.Add(new Item { AData = 5, BData = "Five" });
}
public MyCommand MyCommand { get; set; }
public List<Item> Items { get; set; }
}
}
請張貼您的viewmodel,以便我們測試您的相同數據。 –