我正在使用Visual Studio中的WPF处理简单的MVVM应用程序。我在这里提供View代码以及Model类。我唯一担心的是第一个没有与类Form的属性Name绑定的Textbox。您可以跳过剩余的代码。 我是MVVM架构和WPF的初学者。如果你找到合适的,你也可以建议我犯错误。
感谢。
UI.xaml
<Window x:Class="MVVM.Views.UI"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:custom="clr-namespace:MVVM.ViewModels"
Title="UI" Height="300" Width="300">
<Grid>
<TextBox TextWrapping="Wrap" Text="{Binding MVVM.Models.Form.Name}" Margin="20,15,160,225" />
<TextBox TextWrapping="Wrap" Text="Back Color" Margin="20,73,195,167" />
<TextBox TextWrapping="Wrap" Text="Font Color" Margin="20,122,195,118"/>
<ListBox Name="listBox" ItemsSource="{Binding notifyChangedList}" HorizontalAlignment="Left" Margin="156,42,0,143" Height="85" Width="93" />
<Button Content="Finish" HorizontalAlignment="Left" Margin="112,163,0,0" VerticalAlignment="Top" Width="75"/>
</Grid>
Form.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
namespace MVVM.Models
{
public class Form : INotifyPropertyChanged
{
public Form()
{
}
#region Variables
private String _name;
public String Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged("Name");
}
}
private String _colorBack;
public String ColorBack
{
get { return _colorBack; }
set
{
_colorBack = value;
OnPropertyChanged("ColorBlack");
}
}
private String _colorFont;
public String Color_Font
{
get { return _colorFont; }
set
{
_colorFont = value;
OnPropertyChanged("ColorFont");
}
}
#endregion
#region INotifyPropertyChangedMembers
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
}
UI.xaml.cs
using MVVM.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace MVVM.Views
{
public partial class UI : Window
{
public UI()
{
InitializeComponent();
DataContext = new Form();
}
}
}
答案 0 :(得分:1)
我怀疑您错过了在UI.xaml.cs中初始化DataContext属性。
尝试在构造函数
中初始化它public UI()
{
this.DataContext = new MVVM.Models.Form();
}
在您的UI.xaml中,只需使用Name属性
绑定文本<TextBox TextWrapping="Wrap" Text="{Binding Name}" Margin="20,15,160,225" />
更新:[添加说明]
DataContext类似于“要绑定的对象”与UI元素的容器,一旦分配给任何UI元素,该UI元素的所有子元素也将(种类)引用该绑定对象。所以在我们的例子中,为this.DataContext指定一个对象“Form”就是说UI窗口这是你的绑定对象,所以所有UI子UI元素都会有这个绑定对象的引用。因此,当我们说Text =“{Binding Name}”时,它已经知道绑定对象是Form,它必须在该对象中查找Name属性。
背后的代码实际上被视为View的一部分,它只是将View和ViewModel粘合在一起
进一步阅读
更新2:[对于其他读者]
答案解决了这个问题,但并不是MVVM的真正实现。理想情况下,View与ViewModel绑定,ViewModel可能包含Model对象。看看Channel9上的视频链接或我的博客文章