using System.Diagnostics;
using System;
using System.Windows;
using Reactive.Bindings;
using System.ComponentModel;
using System.Linq;
using System.Reactive.Linq;
namespace WpfSample12DD
{
public class MainWindowViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public ReactiveProperty<string> Input { get; private set; }
public ReactiveCommand<DragFile> PreviewDropCommand { get; }
public MainWindowViewModel()
{
Input = new ReactiveProperty<string>("");
PreviewDropCommand = new ReactiveCommand<DragFile>();
PreviewDropCommand.Subscribe(x => {
Input.Value = x.Name;
});
}
}
}
ファイル名:PreviewDropToDragFileConverter.cs
using Reactive.Bindings.Interactivity;
using System;
using System.Linq;
using System.Reactive.Linq;
using System.Windows;
using System.Windows.Input;
namespace WpfSample12DD
{
public class PreviewDropToDragFileConverter : ReactiveConverter<DragEventArgs, DragFile>
{
protected override IObservable<DragFile> OnConvert(IObservable<DragEventArgs> source) => source
.Where(e => e.Data.GetDataPresent(DataFormats.FileDrop))
.Select(e => new DragFile {
Name = ((string[])e.Data.GetData(DataFormats.FileDrop))[0],
});
}
}
ファイル名:DragFile.cs
using System;
namespace WpfSample12DD
{
public class DragFile
{
public string Name { get; set; }
}
}
ファイル名:MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfSample12DD
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new MainWindowViewModel();
}
}
}
コメント