我使用MVVM模式实现了一个小型WPF应用程序。 我在view.xaml中设置了Datacontext之后。我收到了以下错误。
XAML的代码
#define NOP() ({;})
我的ViewModel
<control:CustomWindow
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:control="clr-namespace:eCustomWindow;assembly=eCustomWindow"
xmlns:eControls="clr-namespace:eControls;assembly=eControls"
xmlns:nGantt="clr-namespace:nGantt;assembly=nGantt"
xmlns:GanttChart="clr-namespace:nGantt.GanttChart;assembly=nGantt"
xmlns:viewModel="clr-namespace:ViewModel;assembly=ViewModel"
x:Class="iView.Window_Absence"
Title="Window_Absence" Height="914" Width="1599">
<control:CustomWindow.DataContext>
<viewModel:ViewModel_Absence/>
</control:CustomWindow.DataContext>
}
Databasecontext类的代码。异常是一样的。在使用adapter_employee填充表employee后,它就抛出了。
namespace ViewModel
{
public class ViewModel_Absence : INotifyPropertyChanged
{
private readonly DatabaseContext _DataContext;
public ViewModel_Absence()
{
this._DataContext = DatabaseContext.Instance;
}
#region PropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
答案 0 :(得分:1)
IMO你有一个设计问题:你在ViewModel中没有你的DataContext, ViewModel是DataContext 。 MVVM的目的是让View和ViewModel尽可能分离。为了解耦,接口是绝对相关的。
我会做以下事情。作为ViewModel:
public interface IMainViewModel : IViewModel {}
public interface IViewModel {}
public class MainViewModel : IMainViewModel, INotifyPropertyChanged {}
在View的CodeBehind(MainWindow.xaml.cs)中:
public interface IView {}
public partial class MainWindow : IView
{
public IMainViewModel ViewModel
{
get { return (IMainViewModel)DataContext; }
set { DataContext = value; }
}
public MainWindow() // for design
{
InitializeComponent();
ViewModel = new MainViewModel();
}
public MainWindow(IMainViewModel mainViewModel) // for DI
{
InitializeComponent();
ViewModel = mainViewModel;
}
}
并在View(MainWindow.xaml)中,确保在Window(或任何View类型)标记中有:
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:myns="clr-namespace:YOURNAMESPACE"
d:DataContext="{d:DesignInstance myns:MainViewModel, IsDesignTimeCreatable=True}"
因此,当您处理设计时,您的ViewModel实例可用于您的设计,并且您在运行时也会拥有正确的ViewModel。因此,您可以调整ViewModel的属性以进行设计(例如,使用模拟),并为运行时提供其他值(可能与数据库或任何内容的连接)。