gpt4 book ai didi

c# - WPF MVMVM使用行为创建对话框

转载 作者:行者123 更新时间:2023-12-03 10:35:15 25 4
gpt4 key购买 nike

我目前正在审查Wpf Mvvm项目。我注意到在某些地方使用行为创建了新对话框。

首先让我们看一下代码:在 View 中,按钮属性设置如下。

  <Button Grid.Column="0"
behaviors:OpenFileClickBehavior.IsOpenFileButton="True"
behaviors:OpenFileClickBehavior.FileOpenDialogFilter="All files (*.*)|*.*" />

然后是一个静态行为类:
 public static class OpenFileClickBehavior
{
public const string IsOpenFileButtonPropertyName = "IsOpenFileButton";

public static readonly DependencyProperty IsOpenFileButtonProperty = DependencyProperty.RegisterAttached(
IsOpenFileButtonPropertyName,
typeof(bool),
typeof(OpenFileClickBehavior),
new UIPropertyMetadata(false, OnIsOpenFileButtonPropertyChanged));

public static readonly DependencyProperty OpenFileDialogFilterProperty = DependencyProperty.RegisterAttached(
"OpenFileDialogFilterProperty",
typeof(String),
typeof(OpenFileClickBehavior),
new UIPropertyMetadata(String.Empty));

private static void OnIsOpenFileButtonPropertyChanged(DependencyObject dpo, DependencyPropertyChangedEventArgs args)
{
Button button = dpo as Button;
if (button != null)
{
if ((bool)args.NewValue)
{
button.Click += ButtonClick;
}
else
{
button.Click -= ButtonClick;
}
}
}

private static void ButtonClick(object sender, RoutedEventArgs e)
{
Button button = sender as Button;
Attachment attachment = button.DataContext as Attachment;
String filter = GetFileOpenDialogFilter(button);

OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = filter;

bool? dialogResult = ofd.ShowDialog();

if (dialogResult != null && dialogResult == true)
{
attachment.Path = ofd.FileName;
}
}

因此,此类中的按钮单击事件正在注册/取消注册和处理。

我知道mvvm建议 View 模型不应该知道该 View ,并且 View 的代码隐藏文件应该为空。该解决方案既没有在 View 的代码背后包含代码,也没有从 View 模型创建 View 。我想知道这种方法是否以其他任何方式破坏了mvvm模式,或有任何不利之处。

谢谢你提前

最佳答案

行为将功能片段封装到可重用的组件中,稍后我们可以将其附加到 View 中的元素上。重点是可重用。可以在代码隐藏中或直接在XAML中执行相同的代码,因此,对于行为而言,这并不是什么魔术。行为还具有保持MVVM模式完整的好处,因为我们可以将代码从代码隐藏移到行为。一个示例是,如果我们要滚动列表框中的选定项,并且选定项是从代码(例如从搜索功能)中选择的。 ViewModel不知道该 View 使用ListBox来显示列表,因此不能用于滚动所选项目。而且,我们不想将代码放在后面的代码中,但是如果我们使用某种行为,则可以解决此问题,并创建可重复使用的组件。

关于c# - WPF MVMVM使用行为创建对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33364827/

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