8

2 つのデータグリッドの両方で項目が選択されている場合にのみ、ボタンを有効にしたいと考えています。現在、いずれかのデータグリッドに選択がある場合に有効になります。何か案は?

<Button x:Name="button" Content="Z" Grid.Column="1" Margin="0,240,0,0" VerticalAlignment="Top" FontFamily="Wingdings 3" FontSize="21.333" ToolTip="Set the selected alarm for the selected alarm time">
    <Button.Style>
        <Style TargetType="Button">
            <Setter Property="IsEnabled" Value="True" />
            <Setter Property="Opacity" Value="1" />
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding ElementName=alarmProfilesDataGrid, Path=SelectedItem}" Value="{x:Null}"/>
                        <Condition Binding="{Binding ElementName=alarmFilesDataGrid, Path=SelectedItem}" Value="{x:Null}"/>
                    </MultiDataTrigger.Conditions>
                    <MultiDataTrigger.Setters>
                        <Setter Property="IsEnabled" Value="False" />
                        <Setter Property="Opacity" Value=".5" />
                    </MultiDataTrigger.Setters>
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>
4

2 に答える 2

0

これを行う正しい方法は、プロパティ バインディングと、ボタンにバインドされた CanExecute 条件を持つコマンドを使用することだと思います。

public RelayCommand SaveCommand { get; set; }

SaveCommand = new RelayCommand();
SaveCommand.Action = () => { Save(SelectedObject1,SelectedObject2); };
SaveCommand.CanExecute = () => { SelectedObject1 != null && SelectedObject2 != null) };

XAML:

<DataGrid SelectedItem="{Binding Path=SelectedObject1}">
</DataGrid>
<DataGrid SelectedItem="{Binding Path=SelectedObject2}">
</DataGrid>
<Button Context="Save" Command="{Binding SaveCommand}/>

これにより、各グリッドから 2 つのオブジェクトが選択されている場合にのみ、ボタンが有効になります。

PS: このコードは有効ではありませんが、SO で RelayCommand を使用する方法を見つけることができます。SO でいくつかの RelayCommand 実装を検索してください。

于 2015-10-20T09:02:00.073 に答える