我正在编写一个简单的MVVM应用程序来学习正确的代码设计。虽然花了一些时间,但事情进展顺利。
我的问题是如何处理事件,以及代码应该放在ViewModel还是Code-Behind中。
首先,有两种绑定事件的技术,一种是使用Blend交互性DLL来绑定到命令,另一种是使用MethodBindingExtension类。
使用交互性DLL,它允许使用EventArgs转换器将事件参数转换为仅包含所需数据的UI不可知类型。我认为MethodBindingExtension没有做到这一点,但它更加灵活。但是,当您需要设置事件参数值时,此事件参数转换器似乎无法帮助您?(或者它允许将值转换回去,还没有检查过这些类)
我喜欢使用MethodBindingExtension,并且现在我的ViewModel中有这段代码。我不喜欢它的地方在于我正在使用特定的UI类型,尽管现在并不是很重要,但从理论上讲,也许可以改进。
我该怎么处理这个问题?将它移动到代码后台?留在 ViewModel 中并使用参数转换器?还是保持现状?
我的问题是如何处理事件,以及代码应该放在ViewModel还是Code-Behind中。
首先,有两种绑定事件的技术,一种是使用Blend交互性DLL来绑定到命令,另一种是使用MethodBindingExtension类。
使用交互性DLL,它允许使用EventArgs转换器将事件参数转换为仅包含所需数据的UI不可知类型。我认为MethodBindingExtension没有做到这一点,但它更加灵活。但是,当您需要设置事件参数值时,此事件参数转换器似乎无法帮助您?(或者它允许将值转换回去,还没有检查过这些类)
我喜欢使用MethodBindingExtension,并且现在我的ViewModel中有这段代码。我不喜欢它的地方在于我正在使用特定的UI类型,尽管现在并不是很重要,但从理论上讲,也许可以改进。
我该怎么处理这个问题?将它移动到代码后台?留在 ViewModel 中并使用参数转换器?还是保持现状?
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;
}
}