我正在尝试在使用MVVM模式构建的Surface应用程序中实现拖放功能。我正在努力想出一种在坚持MVVM模式的同时实现此目的的方法。尽管我正在尝试在Surface应用程序中执行此操作,但我认为该解决方案足够通用,也可以应用于WPF。
我正在尝试产生以下功能:
除了源对象包含在ScatterView中而不是ListBox中之外,整个交互过程与Surface SDK中提供的ShoppingCart应用程序非常相似。
我不确定如何进行操作以启用ViewModel之间的正确通信以提供此功能。我遇到的主要问题是当用户联系FrameworkElement时复制ScatterViewItem。
最佳答案
您可以使用附加属性。创建一个附加属性,并在setproperty方法中绑定(bind)到droped事件:
public static void SetDropCommand(ListView source, ICommand command)
{
source.Drop += (sender, args) =>
{
var data = args.Data.GetData("FileDrop");
command.Execute(data);
};
}
然后,您可以将 View 模型中的命令绑定(bind)到 View 上的相关控件。显然,您可能希望将附加属性应用于特定的控件类型,而不是 ListView 。
希望能有所帮助。
关于wpf - 使用ScatterView在MVVM中拖放,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1034374/