我正在编写一个简单的 MVVM 应用程序来研究正确的代码设计。完成它需要一段时间,但事情进展顺利。
我有一个关于如何处理事件的问题,以及代码应该放在 ViewModel 中还是代码隐藏中。
首先,绑定事件有两种技术,一种是使用 Blend Interactivity DLL 绑定到命令,另一种是使用MethodBindingExtension类。
使用交互 DLL,它允许使用 EventArgs 转换器将事件参数转换为只包含我们需要的数据的 UI 不可知类型。我不认为 MethodBindingExtension 这样做,但它更灵活。但是,当您需要设置事件 args 值时,这个事件 args 转换器将无济于事?(或者它可能允许将值转换回来,还没有检查这些类)
我喜欢使用 MethodBindingExtension,现在我的 ViewModel 中有这段代码。我不喜欢它的是我使用了特定的 UI 类型,这现在没什么大不了的,但从理论上讲,也许可以改进。
我该怎么办?将其移动到代码隐藏中?将它留在 ViewModel 中并使用 args 转换器?就这样放着?
public void Window_DropFile(DragEventArgs e) {
if (e.Data.GetDataPresent(DataFormats.FileDrop)) {
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files) {
ReadScriptFile(file);
}
}
}
public void Window_PreviewDragOver(DragEventArgs e) {
e.Effects = DragDropEffects.All;
e.Handled = true;
}
public void Header_PreviewLeftMouseButtonDown(IScriptViewModel sender, MouseButtonEventArgs e) {
if (sender == SelectedItem && sender.CanEditHeader && !sender.IsEditingHeader) {
sender.IsEditingHeader = true;
e.Handled = true;
}
}
不负相思意
青春有我
相关分类