【问题标题】:Want to create WPF solution in MVVM pattern [closed]想要以 MVVM 模式创建 WPF 解决方案 [关闭]
【发布时间】:2018-09-03 11:09:13
【问题描述】:

我是 WPF 领域的新手,想创建一个解决方案,我想使用 C# 和 XAML 编写 MVVM 程序来执行一些简单的计算。

MainWindow xaml 有一个命名的外部网格View

(MainWindow.xaml.cs) 后面的 xaml 代码可能只包含一个构造函数

View.DataContext 设置为新ViewModel 类的实例。

 public partial class MainWindow : Window
 {
     public MainWindow()
     {
         InitializeComponent();
         View.DataContext = new ViewModel();
     }
 }

两个结果文本框包含:C = A + B 和 D = A * B。

【问题讨论】:

  • 我不是故意粗鲁,但是...你有没有尝试过?我们不是来解决你的作业的
  • @JuanCarlosRodriguez,对不起。我需要一些指导来开始这个。请指导我如何开始。我对WPF很陌生,所以如果我不允许发布这种东西,请原谅我。
  • 查看交互性和EventToCommand。这将使您了解如何以 MvvM 方式处理输入,您还可以在后面的代码中使用事件(只要它调用ViewModel 的命令)。我通常喜欢在 xaml 中启动 DataContext 而不是后面的代码。还向我们展示您的“View”让我担心的 xaml。
  • 实现你描述的方法有很多,但也许你应该老老实实学习WPF的基础知识。因为这些都是非常基础的知识。以结构化的方式学习比在 Stack Overflow 中提问以获得现成的代码更有价值。

标签: c# wpf mvvm


【解决方案1】:

ViewModel类中定义四个属性ABCD并实现INotifyPropertyChanged接口。

CD 应该是只读的,并且每当 AB 更改时,您应该为这些设置 PropertyChanged。这是一个基本示例,应该可以让您了解:

public class ViewModel : INotifyPropertyChanged
{
    private int _a;
    public int A
    {
        get { return _a; }
        set { _a = value; NotifyPropertyChanged(nameof(C)); }
    }

    private int _b;
    public int B
    {
        get { return _b; }
        set { _b = value; NotifyPropertyChanged(nameof(C)); }
    }

    public int C => _a + _b;

    public event PropertyChangedEventHandler PropertyChanged;
    public void NotifyPropertyChanged([CallerMemberName] String propertyName = "") =>
         PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

}

可以通过处理TextBoxesMouseEnterMouseLeave 事件并将窗口的Background 属性设置为Brush 来实现背景更改。此功能纯粹与视图相关,不应在视图模型中实现。

【讨论】:

    【解决方案2】:

    这看起来像是一个家庭作业问题,所以我会给你一些一般性的指示,而不是一个完整的解决方案。

    您的 XAML 需要 4 个文本框(虽然 C 和 D 是只读的,所以它们可能是 TextBlock)

    您的 ViewModel 需要 4 个属性,这些属性绑定到这些框的 Text 属性。在 A 和 B 的设置器中,计算 C 和 D 的值。ViewModel 还需要一个 BackgroundColor 属性。

    在文本框上使用 Interaction.Triggers(来自 Microsoft.Expression.Interactions.dll)将事件传递给您的 ViewModel,并更改 BackgroundColor 属性。

    最后将窗口的Background属性绑定到BackgroundColor属性。

    您应该能够查找每个步骤的示例(和说明)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多