来自ViewModel的WinRT StaticResource在引用的Assembly中

时间:2013-12-29 23:25:12

标签: c# xaml mvvm windows-runtime windows-store-apps

我正在将我们的一个iOS应用程序移植到Windows 8 / 8.1。使用MVVM设计模式,我为其中一个页面创建了一个ViewModel。与我们的WebApp类似,Windows应用程序通过对类库中的相关对象进行分组来分离层。有一个业务/模型层(我将其称为App.BLL)和数据访问层(我将其称为App.Data)。

App引用App.BLL,App.BLL引用App.Data。 App.BLL包含名为Items的名称空间,其中包含Class ItemsViewModel。 ItemsViewModel包含一个ObservableCollection项。当调用ItemsViewModels的构造函数时,它通过调用App.Data(List LoadItems())中包含的方法来设置Items。

我一直把头发拉过来的问题是,设计师正在显示错误,如下所示。

“错误3类型Universe无法解析程序集:App.Data,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null。”

我想这是因为App.BLL引用了App.Data,其中App没有引用App.Data。我也尝试过显式定义xmlns:model(xmlns:model =“using:App.BLL.Items; assembly = App.BLL”)的程序集。

这仅在设计师中导致单独的错误。

错误7未找到程序集“App.BLL”。验证您没有错过程序集引用。另外,请验证是否已构建项目和所有引用的程序集。

如果设计师关闭,则提到的第一个错误消失了(定义程序集时),并被替换为:

错误6 XML名称空间中的未知类型'ItemsViewModel'使用:App.BLL.Products; assembly = App.BLL'

然而,确实存在。

namespace App.BLL.Items
{
    public class ItemsViewModel : IItemInterface
    {
        public ObservableCollection<Item> Items
        {
            get;
            private set;
        }
        public ItemsViewModel()
        {
            Items = Item.GetItems();
        }

        private Item _selectedItem;
        public Item SelectedItem
        {
            get
            {
                return _selectedItem;
            }
            set
            {
                _selectedItem = value;
                OnItemSelected(_selectedItem);
            }
        }
        private RelayCommand<Item> _itemSelected;
        public RelayCommand<Item> ItemSelected
        {
            get
            {
                return _itemSelected ??
                    (_itemSelected = new RelayCommand<Item>(item =>
                    {
                        SelectedItem = item;
                        //Notify Item Selected
                    }));
            }
        }
        public event ItemSelectedEventHandler ItemSelectedChanged;
        protected virtual void OnItemSelected(Item selectedItem)
        {
            ItemSelectedChanged(this, new ItemChangedEventArgs(selectedItem));
        }
    }
}

此时我对设计师错误的关注并不在乎,因为它们在关闭时会消失,因此在运行时似乎可以正常工作。但是上面的错误6我无法编译。

<Page
    x:Class="App.ItemsPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:App"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:model="using:App.BLL.Items"
    mc:Ignorable="d">
    <Page.Resources>
        <model:ItemsViewModel x:Key="ItemSource" />
    </Page.Resources>
<Grid DataContext="{Binding Source={StaticResource ItemSource}}" />
</Page>

我在这里问了一整天,然后在这里提问,我希望我提供了帮助寻找解决方案所需的一切。

编辑:我不能为我的生活得到正确的格式化。我会继续努力,但如果有人可以编辑那也没关系。

0 个答案:

没有答案