【发布时间】:2017-12-24 16:02:58
【问题描述】:
我找到了多种解决方案,如何将 RichTextBox 与 dragAndDrop 事件一起使用,但前提是我将方法放入 View .cs 文件中。我很好奇这是否可以通过 MVVM、绑定并将代码放入 ViewModel 中。
所以我有一个简单的 RichTextBox,我试图从视图模型绑定事件
<RichTextBox HorizontalAlignment="Left" Height="280" VerticalAlignment="Top" Margin="10,10,10,10"
PreviewDragEnter="{Binding RTBPreviewDragEnter}"
PreviewDragOver="{Binding RTBPreviewDragEnter}"
PreviewDrop="{Binding RTBPreviewDrop}"
>
<FlowDocument>
<Paragraph>
<Run Text="RichTextBox"/>
</Paragraph>
</FlowDocument>
</RichTextBox>
和视图模型
private Boolean IsFileImage(string fileName)
{
return true;
}
public void RTBPreviewDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
if (files != null && files.Length > 0)
{
Console.WriteLine("preview drop");
e.Handled = true;
}
}
}
public void RTBPreviewDragEnter(object sender, DragEventArgs e)
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
if (files != null && files.Length > 0 && files.Where(IsFileImage).Any())
{
Console.WriteLine("preview drag enter");
e.Handled = true;
}
}
当我尝试运行它时,它会抛出异常 无法在 RichTextBox 类型的属性 AddPreviewDragEnterHandler 上设置绑定,我应该在 DependencyObject 上使用 DependencyProperty
是否可以通过 MVVM 绑定 RichTextBox 上的事件而无需依赖? (我在某处读到依赖不是 MVVM 的好主意)
我还在这里找到了this 问题,这是相同的,但它使用的是 Expression Blend SDK。使用它有好处吗?
或者说哪种方法在 MVVM 中比较好?
编辑: 这个问题被标记为重复,但在其他问题中作者接受了通过 Expression Blend SDK 实现的解决方案,但我只是好奇它是否可以在没有它的情况下完成。
【问题讨论】:
标签: c# wpf mvvm richtextbox