0

これは私のxamlの一部です:

<DataGrid ItemsSource="{Binding listImages, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" Name="dataGrid1" Height="341" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="10,10,10,0" Width="225" CanUserResizeRows="False" CanUserResizeColumns="False" CanUserReorderColumns="False" CanUserAddRows="False" IsHitTestVisible="True" OverridesDefaultStyle="False" SelectedIndex="0" SelectionUnit="FullRow" SelectionMode="Single">
<DataGrid.InputBindings>

    <KeyBinding Key="a" Command="{Binding Path=KeyPressed}"/>                    
    <KeyBinding Key="s" Command="{Binding Path=KeyPressed}"/>
    <KeyBinding Key="d" Command="{Binding Path=KeyPressed}"/> 

</DataGrid.InputBindings>
<DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
        <Setter Property="Background" Value="{Binding rowColor}"/>
    </Style>
</DataGrid.RowStyle>
<DataGrid.Columns>                   
    <DataGridTextColumn Header="ImageName" Binding="{Binding imageName}" Width="112" />
    <DataGridTextColumn Header="Tag" Binding="{Binding tag}" Width="110" />
</DataGrid.Columns>

このデータグリッドのみ、またはより適切にはKeyBindingsのみが定義されている.xamlをロードしたいと思います。これは、ユーザーがバインドできるキーを変更できるためです。

例:トムは、a、s、dの代わりにキーz、x、cを使用したいと考えています。これを行うために、彼はデフォルトのxml / xaml(どこかにあります)を編集し、KeyBindingのKeyパラメーターを変更してロードします。

新しいxml/xamlは次のようになります。

<DataGrid ItemsSource="{Binding listImages, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False" Name="dataGrid1" Height="341" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="10,10,10,0" Width="225" CanUserResizeRows="False" CanUserResizeColumns="False" CanUserReorderColumns="False" CanUserAddRows="False" IsHitTestVisible="True" OverridesDefaultStyle="False" SelectedIndex="0" SelectionUnit="FullRow" SelectionMode="Single">
<DataGrid.InputBindings>

    <KeyBinding Key="z" Command="{Binding Path=KeyPressed}"/>                    
    <KeyBinding Key="x" Command="{Binding Path=KeyPressed}"/>
    <KeyBinding Key="c" Command="{Binding Path=KeyPressed}"/> 

</DataGrid.InputBindings>
<DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
        <Setter Property="Background" Value="{Binding rowColor}"/>
    </Style>
</DataGrid.RowStyle>
<DataGrid.Columns>                   
    <DataGridTextColumn Header="ImageName" Binding="{Binding imageName}" Width="112" />
    <DataGridTextColumn Header="Tag" Binding="{Binding tag}" Width="110" />
</DataGrid.Columns>

MVVMパターンに従ってこれを行うことは可能ですか?

4

1 に答える 1

0

ユーザーのキーバインドの選択をXAMLとして保持しません。Bindingタグなどはユーザーにとって何の意味もありません。

代わりに、他のより使いやすい方法でキーバインドを永続化します。たとえば、次のような単純なiniスタイルのテキストファイルでもかまいません。

Command1Key=z
Command2Key=x
Command3Key=c

それらをViewModelにロードしたら、InputBindingCollectionプロパティとしてビューに公開し、ビューをバインドできます。

于 2012-09-05T11:18:46.983 に答える