想要以MVVM模式创建WPF解决方案

时间:2018-09-03 11:09:14

标签: c# wpf mvvm

我是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。

2 个答案:

答案 0 :(得分:1)

这看起来像是一个家庭作业问题,因此,我将为您提供一些一般性的提示,而不是完整的解决方案。

您的XAML需要4个文本框(尽管C和D是只读的,因此它们可能是TextBlocks)

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

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

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

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

答案 1 :(得分:1)

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

CD应该是只读的,并且每当PropertyChangedA发生变化时,您都应该为它们增加B。这是一个基本的示例,应该可以为您提供想法:

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));

}

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