ツールバー (追加および削除コマンド) と TabControl を備えたアプリケーションがあります。TabControl の各 tabItem に VariableGrid コントロールがあります。
画像を見てください:http://trueimages.ru/view/cNFyf
<DockPanel >
<ToolBarTray DockPanel.Dock="Top">
<ToolBar>
<Button Command="{x:Static VariableGrid:VariableGrid.AddRowCommand}"/>
<Button Content="Delete" Command="ApplicationCommands.Delete" />
</ToolBar>
</ToolBarTray>
<TabControl x:Name="tc">
<TabItem Header="Tab 1">
<vg:VariableGrid ItemsSource="{Binding Items1, Mode=TwoWay}"/> </TabItem>
<TabItem Header="Tab 2">
<vg:VariableGrid ItemsSource="{Binding Items2, Mode=TwoWay}"/>
</TabItem>
</TabControl>
<DockPanel >
ツールバー コマンドは、私のコントロールに実装されています。
public partial class VariableGrid : DataGrid, INotifyPropertyChanged
{
public static RoutedCommand AddRowCommand = new RoutedCommand();
public VariableGrid()
{
this.CommandBindings.Add(new CommandBinding(VariableGrid.AddRowCommand, AddRow));
this.CommandBindings.Add(new CommandBinding(ApplicationCommands.Delete, R emoveRow, CanRemoveRow));
}
private void AddRow(object sender, ExecutedRoutedEventArgs e)
{
…
}
private void RemoveRow(object sender, ExecutedRoutedEventArgs e)
{
…
}
private void CanRemoveRow(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = (SelectedItems.Count > 0);
}
}
ツールバーのコマンドが無効になっているケースはほとんどありません:
- アプリケーションの実行時
- DataGrid の灰色のフィールドをクリックすると
- DataGrid が空の場合
DataGrid の任意の行が選択されると、ツールバーのコマンドがアクティブになります。
私の問題で私を助けてもらえますか? ツールバー ボタンのどの CommandTarget を設定すればよいですか?
PS: 私のアプリケーションには 2 つの VariableGrid があります。CommandTarget を "{Binding ElementName=variableGrid}" として設定できないのはそのためです。FocusedElement に設定する必要があると思います。しかし、これを行う方法がわかりません。