如何通过MVVM在WPF的数据网格中一次选择2行

如何通过MVVM在WPF的数据网格中一次选择2行,wpf,mvvm,wpf-controls,Wpf,Mvvm,Wpf Controls,“我的日期”网格由带有事务详细信息列表的行组成 第一行和第二行包括交易编号:1详细信息 第二行包括交易编号:2详细信息并继续 所以,如果我自动选择事务编号:1行,将选择下一行(事务编号:1)。 相同的规则适用于具有事务编号的所有行 所以,如何在wpf中实现这一点,以使用户看到他选择了2行。我必须使用MVVM模式来实现它。告诉数据网格选择多个行很简单,“SelectionMode=Extended”。但是我认为您需要添加一个行为来自动选择第二行。类似这样的东西(大多数是硬编码的,因此可能无法完美工

“我的日期”网格由带有事务详细信息列表的行组成

第一行和第二行包括交易编号:1详细信息
第二行包括交易编号:2详细信息并继续

所以,如果我自动选择事务编号:1行,将选择下一行(事务编号:1)。 相同的规则适用于具有事务编号的所有行


所以,如何在wpf中实现这一点,以使用户看到他选择了2行。我必须使用MVVM模式来实现它。

告诉数据网格选择多个行很简单,“SelectionMode=Extended”。但是我认为您需要添加一个行为来自动选择第二行。类似这样的东西(大多数是硬编码的,因此可能无法完美工作;)

创建一个新类并将其命名为DataGridSelectMulti.cs

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Text;

namespace DataGridSelectMulti
{
    public class DataGridSelectMulti: CommandBehaviorBase<DataGrid>
    {
               protected override void OnAttached()
        {
            base.OnAttached();
            this.AssociatedObject.SelectionChanged += new SelectionChangedEventHandler(AssociatedObject_SelectionChanged);
        }

        void AssociatedObject_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (sender is DataGrid)
            {
                DataGrid grid = (sender as DataGrid);
                if (grid.SelectedItem != null)
                {
                    grid.UpdateLayout();
                    //TODO
                    // Something like grid.SelectedItems = List
                }
            }

        }



        protected override void OnDetaching()
        {
            base.OnDetaching();
            this.AssociatedObject.SelectionChanged -= new SelectionChangedEventHandler(AssociatedObject_SelectionChanged);
        }
    }



XAML

<Grid>
<DataGrid name='' Selcted...>
            <i:Interaction.Behaviors>
                <my1:DataGridSelectMulti/>
            </i:Interaction.Behaviors>
<DataGrid .Columns />
</DataGrid >
</Grid>
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Input;
使用系统文本;
命名空间DataGridSelectMulti
{
公共类DataGridSelectMulti:CommandBehaviorBase
{
受保护的覆盖无效附加()
{
base.onatached();
this.AssociatedObject.SelectionChanged+=新的SelectionChangedEventHandler(AssociatedObject\u SelectionChanged);
}
无效关联对象\u选择已更改(对象发送者,选择已更改数据源e)
{
如果(发送方是DataGrid)
{
DataGrid=(发送方为DataGrid);
如果(grid.SelectedItem!=null)
{
grid.UpdateLayout();
//待办事项
//类似于grid.SelectedItems=List的内容
}
}
}
附加时受保护的覆盖无效()
{
base.OnDetaching();
this.AssociatedObject.SelectionChanged-=新的SelectionChangedEventHandler(AssociatedObject\u SelectionChanged);
}
}
XAML

你能给我提供一些关于如何添加行为(在MVVM中)的示例吗?顺便说一句,如果你想在MVVM模式中实现它,最好创建一个新的类库,在那里你可以添加所有的转换器、行为等等。。。