私は.NetとC#を初めて使用し、バインディングと少し混乱しています。MVVMを実装し、DataGridを表示するアプリケーションがあります。私が実装したいのは、ユーザーが特定のキーの組み合わせを押すと、現在選択されているセルのコンテンツが下の行のセルにコピーされることです。DataGridのSelectedItemをViewModelプロパティにバインドしようとしましたが、更新されません。CommandParameterも機能せず、アイテム数は常に0です。そのため、ユーザーが選択したセルを抽出できず、選択したセルの内容を読み取ることができません。この問題を解決する方法やこの機能を実装する方法を誰かが提案していますか?前もって感謝します。コード:xaml:
<DataGrid Grid.Row="1"
Grid.Column="0"
Grid.ColumnSpan="9"
AutoGenerateColumns="False"
Height="Auto"
HorizontalAlignment="Left"
Name="dataGrid"
VerticalAlignment="Top"
Width="{Binding ElementName=grid4,Path=Width}"
ScrollViewer.CanContentScroll="False"
FrozenColumnCount="1"
SelectionUnit="Cell"
SelectionMode="Extended"
CanUserSortColumns = "False"
CanUserReorderColumns="False"
CanUserResizeRows="False"
RowHeight="25"
RowBackground="LightGray"
AlternatingRowBackground="White"
ScrollViewer.VerticalScrollBarVisibility="Visible"
ScrollViewer.HorizontalScrollBarVisibility="Visible"
ItemsSource="{Binding Layers, Mode=TwoWay}"
SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.Selection, Mode=TwoWay}">
<DataGrid.InputBindings>
<KeyBinding Gesture="Shift"
Command="{Binding ItemHandler}"
CommandParameter="{Binding ElementName=dataGrid, Path=SelectedItems}">
</KeyBinding>
</DataGrid.InputBindings>
</DataGrid>
ViewModel:
private float _selection = 0.0f;
public float Selection
{
get
{
return _selection;
}
set
{
if (_selection != value)
{
_selection = value;
NotifyPropertyChanged("Selection");
}
}
}
..。
public DelegateCommand<IList> SelectionChangedCommand = new DelegateCommand<IList>(
items =>
{
if (items == null)
{
NumberOfItemsSelected = 0;
return;
}
NumberOfItemsSelected = items.Count;
});
public ICommand ItemHandler
{
get
{
return SelectionChangedCommand;
}
}