我是WPF编程的新手,所以请原谅我这是否是一个明显的错误。我有一个UserControl对象,其中包含以下Xaml:
<UserControl x:Class="SDMAS.LOOPAnalyzer.Views.Workspace"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit"
xmlns:local="clr-namespace:SDMAS.LOOPAnalyzer.Models" >
<UserControl.Resources>
<!-- create an instance of our DataProvider class -->
<ObjectDataProvider x:Key="tblLOOPDataProvider" ObjectType="{x:Type local:tblLOOPDataProvider}"/>
<!-- define the method which is invoked to obtain our data -->
<ObjectDataProvider x:Key="LOOPEvents" ObjectInstance="{StaticResource tblLOOPDataProvider}" MethodName="GetData"/>
</UserControl.Resources>
<DockPanel DataContext="{Binding Source={StaticResource LOOPEvents}}">
<dg:DataGrid ItemsSource="{Binding}" Name="dataGrid"/>
</DockPanel>
</UserControl>
此代码实际上有效。数据表中的记录正确显示在应用程序的视图中。问题是该控件的Visual Studio设计者认为存在问题,抱怨无法在命名空间中找到对象类型:ObjectType =&#34; {x:Type local:tblLOOPDataProvider}&#34;
命名空间确实存在,并且确实包含了类,正如代码工作所证明的那样。那么设计师会给出什么呢?
以下是错误消息的屏幕截图:
这是tblLOOPDataProvider代码
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SDMAS.LOOPAnalyzer.Models.LOOPDataSetTableAdapters;
namespace SDMAS.LOOPAnalyzer.Models
{
/// <summary>
/// Provides a singleton instance of the LOOPDataSet
/// </summary>
public class LOOPDataProvider
{
private static LOOPDataSet _loopDataSet;
public static LOOPDataSet LOOPDataSet
{
get
{
if (_loopDataSet == null)
{
_loopDataSet = new LOOPDataSet();
}
return _loopDataSet;
}
}
}
/// <summary>
/// A source of LOOP event objects
/// </summary>
public class tblLOOPDataProvider
{
private tblLOOPTableAdapter _adapter;
public tblLOOPDataProvider()
{
LOOPDataSet dataset = LOOPDataProvider.LOOPDataSet;
_adapter = new tblLOOPTableAdapter();
_adapter.Fill(LOOPDataProvider.LOOPDataSet.tblLOOP);
dataset.tblLOOP.tblLOOPRowChanged += new LOOPDataSet.tblLOOPRowChangeEventHandler(tblLOOPRowModified);
dataset.tblLOOP.tblLOOPRowDeleted += new LOOPDataSet.tblLOOPRowChangeEventHandler(tblLOOPRowModified);
}
void tblLOOPRowModified(object sender, LOOPDataSet.tblLOOPRowChangeEvent e)
{
_adapter.Update(LOOPDataProvider.LOOPDataSet.tblLOOP);
}
public DataView GetData()
{
return LOOPDataProvider.LOOPDataSet.tblLOOP.DefaultView;
}
}
}
自从我第一次发布这个以来,我一直在攻击项目的各个部分,现在设计师根本没有显示Xaml。只是说装载设计师......并且似乎挂起了。
更多背景知识。我基于CodeProject上的Prism4Demo(David Veeneman)开始了这个项目。自从它开始以来,它已经发生了很大变化,迁移到Prism 6并更新了其他依赖项。该演示似乎是一个应用程序的一个很好的模板,它将有许多模块由不同的工作人员独立开发,可能只有一个专业程序员提供集成(而不是我)。创建设计器问题的类是&#34;工作区&#34;最终将连接到视图模型的模块之一的视图,视图模型又连接到由表示SQL服务器上的LOOP事件数据表的DataSet组成的模型。在当前的学习步骤中,我已将服务器数据表连接到DataSet,我在工作区视图中直接显示而没有中间的视图模型(除了设计器问题,它正在工作)。我的代码基于互联网示例,我一直都不了解,但已经能够开展工作。所以我还不了解LOOPDataProvider类复杂性的原因,或者在Xaml中使用Resources。
所以我继续研究MVVM结构,我的下一步是将基于DataSet的模型连接到视图模型,将视图模型连接到视图。