gpt4 book ai didi

c# - MVVM 和 Prism - 如何处理 ViewModel 中的 TextBox_DragEnter 和 TextBox_Drop 事件

转载 作者:行者123 更新时间:2023-11-30 23:17:41 25 4
gpt4 key购买 nike

我正在学习 MVVM 和 PRISM,并尝试处理 TextBox 的 Drop 和 DragEnter 事件。

我成功地点击了一个按钮

    public ButtonsViewModel()
{
//If statement is required for viewing the MainWindow in design mode otherwise errors are thrown
//as the ButtonsViewModel has parameters which only resolve at runtime. I.E. events
if (!(bool)DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)
{
svc = ServiceLocator.Current;
events = svc.GetInstance<IEventAggregator>();
events.GetEvent<InputValidStatus>().Subscribe(SetInputStatus);
StartCommand = new DelegateCommand(ExecuteStart, CanExecute).ObservesProperty(() => InputStatus);
ExitCommand = new DelegateCommand(ExecuteExit);
}
}

private bool CanExecute()
{
return InputStatus;
}

private void ExecuteStart()
{
InputStatus = true;
ERA Process = new ERA();
Proces.Run();
}

这工作正常,并且对不采用 EventArgs 的其他事件执行此操作没有问题。所以 Drop 方法可以很好地实现,因为我不需要与 EventArgs 交互。

然而,对于 Textbox_DragEnter 事件,它设置了 TextBox 的 DragDropEffects

    private void TextBox_DragEnter(object sender, DragEventArgs e)
{
e.Effects = DragDropEffects.Copy;
}

我的第一个想法是创建一个 ICommand 并将其绑定(bind)到 TextBox_DragEnter 事件,并在 ViewModel 中更新一个 DragDropEffects 属性。但是我看不到如何将效果绑定(bind)到文本框。

我可能想错了。这样做的正确方法是什么?

我知道我可以在后面的代码中轻松设置这些事件,但我宁愿不这样做,而是纯粹使用 MVVM 模式来保持它

希望这是有道理的。

最佳答案

另一个交互触发器解决方案,类似于 Kevin 提出的方案,但这将适用于 Prism(非 MVVMLight 解决方案)。

需要命名空间:

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

XAML:

<TextBox Name="TextBox" Text="{Binding MVFieldToBindTo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="DragEnter">
<i:InvokeCommandAction
Command="{Binding BoundCommand}"
CommandParameter="{Binding Text, ElementName=TextBox}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>

BoundCommand 将是 View 模型中的 DelegateCommand。看起来你已经很清楚那是什么了。这是使用 DragEnter 编写的,但我在实践中只将其用于 LostFocus 事件,因此您可能需要稍微尝试一下。它应该让您朝着正确的方向前进。

关于c# - MVVM 和 Prism - 如何处理 ViewModel 中的 TextBox_DragEnter 和 TextBox_Drop 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41300719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com