Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 要以MVVM模式创建WPF解决方案吗_C#_Wpf_Mvvm - Fatal编程技术网

C# 要以MVVM模式创建WPF解决方案吗

C# 要以MVVM模式创建WPF解决方案吗,c#,wpf,mvvm,C#,Wpf,Mvvm,我是WPF领域的新手,希望创建一个解决方案,在这个解决方案中,我希望使用C#和XAML编写MVVM程序来执行一些简单的计算 main窗口xaml有一个命名的外部网格视图 xaml代码隐藏(MainWindow.xaml.cs)只能包含构造函数 它将View.DataContext设置为新ViewModel类的实例 public partial class MainWindow : Window { public MainWindow() { Initia

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

main窗口xaml
有一个命名的外部网格
视图

xaml代码隐藏(
MainWindow.xaml.cs
)只能包含构造函数

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

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

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

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

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

ViewModel需要4个属性,这些属性绑定到这些框的文本属性。在A和B的setter中,计算C和D的值。ViewModel还需要BackgroundColor属性

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

最后,将窗口的背景属性绑定到BackgroundColor属性


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

ViewModel
类中定义四个属性,
A
B
C
D
,并实现该接口

C
D
应该是只读的,只要
A
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
MouseLeave
事件来实现,并将窗口的
background
属性设置为
Brush
。此功能纯粹与视图相关,不应在视图模型中实现。

我不是故意粗鲁,而是。。。你试过什么吗?我们不是来解决你的问题的homework@JuanCarlosRodriguez,对不起。我需要一些指导来开始这项工作。请指导我如何开始。我是WPF的新手,因此如果不允许我发布此类内容,请原谅。查看互动性和
EventToCommand
。这将使您了解如何以MvvM方式处理输入,您还可以在代码隐藏中使用事件(只要它调用
ViewModel
的命令)。我个人喜欢在xaml中启动
DataContext
,而不是代码隐藏。同时向我们展示您的xaml,让我担心的是“
视图”
。有很多方法可以实现您所描述的内容,但也许您应该诚实地学习WPF的基本知识。因为这些都是非常基础的知识。对于您来说,以结构化的方式学习比在Stack Overflow中提问以获得现成的代码更有价值。