Binding MVVM DataGrid SelectedItem绑定不’;我不能得到更新

Binding MVVM DataGrid SelectedItem绑定不’;我不能得到更新,binding,mvvm,.net-4.0,wpfdatagrid,selecteditem,Binding,Mvvm,.net 4.0,Wpfdatagrid,Selecteditem,我不熟悉.Net和C#,对绑定有点困惑。我有一个实现MVVM并显示DataGrid的应用程序。我想实现的是,当用户按下某个组合键时,当前选定单元格的内容将复制到下一行的单元格中。 我已尝试将DataGrid的SelectedItem绑定到ViewModel属性,但它从未得到更新。CommandParameter也不起作用,项目计数始终为0。 因此,我无法提取用户选择的单元格,也无法读取所选单元格的内容。 是否有人对如何解决此问题或实现此功能提出建议? 提前谢谢。 代码: xaml: publi

我不熟悉.Net和C#,对绑定有点困惑。我有一个实现MVVM并显示DataGrid的应用程序。我想实现的是,当用户按下某个组合键时,当前选定单元格的内容将复制到下一行的单元格中。 我已尝试将DataGrid的SelectedItem绑定到ViewModel属性,但它从未得到更新。CommandParameter也不起作用,项目计数始终为0。 因此,我无法提取用户选择的单元格,也无法读取所选单元格的内容。 是否有人对如何解决此问题或实现此功能提出建议? 提前谢谢。 代码: xaml:

public DelegateCommand SelectionChangedCommand=new DelegateCommand(
项目=>
{
if(items==null)
{
NumberOfItemsSelected=0;
回来
}
NumberOfItemsSelected=items.Count;
});
公共ICommand ItemHandler
{
收到
{
返回SelectionChangedCommand;
}
}

编辑:SelectionUnit=Cell不能与SelectedItem一起使用

这是mvvm的正常方式:

首先是要在每行中显示的对象类型

 public class MyObject {}
第二个视图模型,用于保存集合和所选项目

 public class MyViewmodel
 {
    public ObservableCollection<MyObject> MyItems {get;set;}
    public MyObject MySelectedItem {get;set;}

 }
公共类MyViewmodel
{
公共ObservableCollection MyItems{get;set;}
公共MyObject MySelectedItem{get;set;}
}
xaml数据网格

 <DataGrid ItemsSource="{Binding MyItems}" SelectedItem="{Binding MySelectedItem, Mode=TwoWay}"/>

这就是你所拥有的。如果您现在想要创建一个“复制”行的命令,您可以创建一个新的对象MyObject并从MySelectedItem复制值,然后将新的MyObject添加到集合中


但是也许我没有理解你的问题。

编辑:SelectionUnit=Cell不使用SelectedItem

这是mvvm的正常方式:

首先是要在每行中显示的对象类型

 public class MyObject {}
第二个视图模型,用于保存集合和所选项目

 public class MyViewmodel
 {
    public ObservableCollection<MyObject> MyItems {get;set;}
    public MyObject MySelectedItem {get;set;}

 }
公共类MyViewmodel
{
公共ObservableCollection MyItems{get;set;}
公共MyObject MySelectedItem{get;set;}
}
xaml数据网格

 <DataGrid ItemsSource="{Binding MyItems}" SelectedItem="{Binding MySelectedItem, Mode=TwoWay}"/>

这就是你所拥有的。如果您现在想要创建一个“复制”行的命令,您可以创建一个新的对象MyObject并从MySelectedItem复制值,然后将新的MyObject添加到集合中


但也许我没把你的问题答对。

我想你可以加一个依赖属性。这就是答案:

public class UIElementMouseRightButtonDownCommandBehavior : CommandBehaviorBase<UIElement>
{
    public UIElementMouseRightButtonDownCommandBehavior(UIElement obj)
        : base(obj)
    {
        if (obj == null) throw new System.ArgumentNullException("obj");
        obj.MouseRightButtonDown += OnMouseRightButtonDown;
    }

    private void OnMouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        ExecuteCommand();
    }       
}
然后在视图模型文件中:

public ICommand SelectNameCommand
    {
        get { return new Command(P => SelectName()); }
    }

我认为您的XAML是正确的。

我认为您可以添加依赖属性。这就是答案:

public class UIElementMouseRightButtonDownCommandBehavior : CommandBehaviorBase<UIElement>
{
    public UIElementMouseRightButtonDownCommandBehavior(UIElement obj)
        : base(obj)
    {
        if (obj == null) throw new System.ArgumentNullException("obj");
        obj.MouseRightButtonDown += OnMouseRightButtonDown;
    }

    private void OnMouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        ExecuteCommand();
    }       
}
然后在视图模型文件中:

public ICommand SelectNameCommand
    {
        get { return new Command(P => SelectName()); }
    }

我认为您的XAML是正确的。

图层是浮点元素的集合吗?图层是包含图层对象的可观察集合。类层实现INotifyPropertyChanged并具有浮点字段。DataGrid单元格显示一层浮动字段。也许您应该添加您想要实现的内容。我的观点是正确的:当用户单击某个单元格时,下一行的同一单元格的值应该是相同的?奇怪的要求。当用户单击最后一行的单元格时会发生什么情况?“当用户单击下一行的单元格时,同一单元格的值应相同”是的,这是要求。(虽然单击是一种类似于“Ctrl+D”的快捷方式)如果单元格位于最后一行,则什么也不会发生。图层是浮动元素的集合吗?图层是包含图层对象的可观察集合。类层实现INotifyPropertyChanged并具有浮点字段。DataGrid单元格显示一层浮动字段。也许您应该添加您想要实现的内容。我的观点是正确的:当用户单击某个单元格时,下一行的同一单元格的值应该是相同的?奇怪的要求。当用户单击最后一行的单元格时会发生什么情况?“当用户单击下一行的单元格时,同一单元格的值应相同”是的,这是要求。(虽然单击是一种类似于“Ctrl+D”的快捷方式)如果单元格位于最后一行,则不会发生任何事情。感谢您的回复。问题是MySelectedItem始终为null,并且从未调用MySelectedItem的set方法。所以SelectedItem始终为row?如何仅从选定的单元格获取内容?问题在于选定的属性/单元格是否正确。我想说,这是一个新问题的主题,只需关闭这个,然后打开一个新问题。我必须搜索一下,这如何与mvvm一起工作。也许已经有一种行为了:)好吧,我在这里提出了一个新问题:谢谢你的回答。问题是MySelectedItem始终为null,并且从未调用MySelectedItem的set方法。所以SelectedItem始终为row?如何仅从选定的单元格获取内容?问题在于选定的属性/单元格是否正确。我想说,这是一个新问题的主题,只需关闭这个,然后打开一个新问题。我必须搜索一下,这如何与mvvm一起工作。也许已经有一种行为了:)好吧,我在这里提出了一个新问题: