Cześć czy jest możliwość napisania kodu który umożliwia za pomocą myszki zmieniać pozycję wierszy na Data gridzie na wzorcu mvvm ? :)
ViewModel:
public class MainWindowViewModel : ViewModelBase
{
public MainWindowViewModel()
{
GenerateReportCommand = new ClickCommand();
GenerateReportCommand.Enabled = true;
GenerateReportCommand.OnClick += OnGenerateReport;
Users = new ObservableCollection<User>();
Users.Add(new User("Jan", "Nowak"));
Users.Add(new User("Miłosz", "Iles"));
Users.Add(new User("Anna", "Fatyga"));
MySource = CollectionViewSource.GetDefaultView(Users);
}
private void OnGenerateReport()
{
MySource.Refresh();
var s = MySource.OfType<User>();
var users = Users;
}
public ClickCommand GenerateReportCommand { get; set; }
private ObservableCollection<User> _user;
public ObservableCollection<User> Users
{
get => _user;
set
{
_user = value;
OnPropertyChanged(nameof(Users));
}
}
public ICollectionView MySource { get; set; }
}
XAML:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
xmlns:dd="urn:gong-wpf-dragdrop"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<DataGrid Grid.Row="0" Grid.Column="0" ItemsSource="{Binding MySource}" IsReadOnly="True" AutoGenerateColumns="False" AllowDrop="True"
CanUserAddRows="False"
CanUserDeleteRows="False"
dd:DragDrop.DropScrollingMode="HorizontalOnly"
dd:DragDrop.IsDragSource="True"
dd:DragDrop.IsDropTarget="True">
<DataGrid.Columns>
<DataGridTextColumn SortMemberPath="UserFirstName" Header="First Name" IsReadOnly="False" CanUserSort="true" Binding="{Binding UserFirstName}">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextWrapping" Value="Wrap" />
<Setter Property="TextBlock.TextAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn SortMemberPath="UserLastName" Header="Last Name" IsReadOnly="False" CanUserSort="true" Binding="{Binding UserLastName}" >
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextWrapping" Value="Wrap" />
<Setter Property="TextBlock.TextAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<Button Width="20" Height="20" Content="Generate" Command="{Binding Path=GenerateReportCommand}"></Button>
</Grid>
</Window>