【发布时间】:2012-07-16 13:03:29
【问题描述】:
我是 .Net 和 C# 的新手,对绑定有点困惑。我有实现 MVVM 并显示 DataGrid 的应用程序。我想要实现的是,当用户按下某个组合键时,当前选定单元格的内容会被复制到下面一行的单元格中。 我尝试将 DataGrid 的 SelectedItem 绑定到 ViewModel 属性,但它永远不会更新。 CommandParameter 也不起作用,项目计数始终为 0。 所以我无法提取用户选择的单元格,也无法读取所选单元格的内容。 有没有人建议如何解决这个问题或实现这个功能? 提前致谢。 代码: xml:
<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>
视图模型:
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;
}
}
【问题讨论】:
-
图层是浮动元素的集合吗?
-
Layers 是一个包含 Layer 对象的 ObservableCollection。类层实现 INotifyPropertyChanged 并具有浮动字段。 DataGrid 单元格显示一个图层浮动字段。
-
也许你应该添加你想要实现的目标。我是对的:当用户单击一个单元格时,下一行相同的单元格应该是相同的值?奇怪的要求。当用户单击最后一行中的单元格时会发生什么?
-
“当用户单击一个单元格时,下一行相同的单元格应该是相同的值”是的,这就是要求。 (虽然点击更像是“Ctrl+D”之类的快捷方式)如果单元格在最后一行,则什么也不会发生。
标签: binding mvvm .net-4.0 wpfdatagrid selecteditem