设计时错误(未找到可附加属性x)

时间:2013-04-03 08:09:09

标签: wpf silverlight windows-phone-7 xaml expression-blend

我使用Blend for VS 2012来创建WP7.8应用程序的模板。有一些样本数据(位于单独的xaml文件中,见下图),它们正确地在silverlight页面上以设计模式显示。更改此数据(使用名称空间和类名称)会导致编辑器错误,并且新数据不再显示在设计模式中。 (List组件显示为空)

页面的主要xaml文件如下

<phone:PhoneApplicationPage
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="800" 
    x:Class="DesignSketch.MainPage"
    d:DataContext="{d:DesignData SampleData/MainViewModelSampleData.xaml}"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible="True">

    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <!--Pivot Control-->
        <controls:Pivot Title="Application">
            <!--Pivot item one-->
            <controls:PivotItem Header="List">
                <!--Double line list with text wrapping-->
                <ListBox x:Name="FirstListBox" ItemsSource="{Binding Items}" Margin="0,0,-12,0">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Margin="0,0,0,17" Width="432" Height="78">
                                <TextBlock Text="{Binding Sum}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                                <TextBlock Text="{Binding Description}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </controls:PivotItem>


        </controls:Pivot>
    </Grid>
</phone:PhoneApplicationPage>

可以看出它使用

d:DataContext="{d:DesignData SampleData/MainViewModelSampleData.xaml}"

用于设计模式绑定。如何显示错误(提示)“在MainViewModelSampleData.xaml中找到的错误

此xaml的内容是

<viewModels2:ExpensesPageVM
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:viewModels2="clr-namespace:DesignSketch"
    >
    <viewModels2:ExpensesPageVM.Items>
          <viewModels2:Expense Sum="10" Description="Fee1"   />
          <viewModels2:Expense Sum="600" Description="Fee2"  />
    </viewModels2:ExpensesPageVM.Items>

</viewModels2:ExpensesPageVM>

显示以下提示错误 在ExpensesPageVM

类型中找不到可附加属性项

找不到类型viewModels2:Expense。验证您是否缺少程序集引用,并且已构建所有引用的程序集

ExpensesPageVM和Expense类都位于DesignSke​​tch命名空间中,并具有以下代码:

using System;
using System.Linq;
using System.ComponentModel;
using System.Collections.ObjectModel;

namespace DesignSketch
{
    public class ExpensesPageVM : INotifyPropertyChanged
    {
        public ExpensesPageVM()
        {
            this.Items = new ObservableCollection<Expense>();
        }

        /// <summary>
        /// A collection for ItemViewModel objects.
        /// </summary>
        public ObservableCollection<Expense> Items { get;  set; }

        private string _sampleProperty = "Sample Runtime Property Value";
        /// <summary>
        /// Sample ViewModel property; this property is used in the view to display its value using a Binding
        /// </summary>
        /// <returns></returns>
        public string SampleProperty
        { 
            get
            {
                return _sampleProperty;
            }
            set
            {
                _sampleProperty = value;
                NotifyPropertyChanged("SampleProperty");
            }
        }

        public bool IsDataLoaded
        {
            get;
            private set;
        }

        /// <summary>
        /// load initial data from sdf
        /// </summary>
        public void LoadData()
        {
            //...
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void NotifyPropertyChanged(String propertyName)
        {
            if (null != PropertyChanged)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}

其他档案

using System;
using System.Data.Linq.Mapping;
using System.ComponentModel;

namespace DesignSketch
{
   [Table]
    public class Expense: INotifyPropertyChanged, INotifyPropertyChanging
    {
        private int expenseID;

        [Column(IsPrimaryKey = true,
            IsDbGenerated = true,
            DbType="INT NOT NULL Identity",
            CanBeNull=false,
            AutoSync=AutoSync.OnInsert)]
        public int ExpenseID { get {return  expenseID;}
            set
            {
                if (expenseID == value) return;
                NotifyPropertyChanging("ExpenseID");
                expenseID = value;
                NotifyPropertyChanged("ExpenseID");
            }
        }

        private string description { get; set; }

        [Column]
        public string Description { get { return description; }
            set
            {
                if (description == value) return;

                NotifyPropertyChanging("Description");
                description = value;
                NotifyPropertyChanged("Description");
            }
        }

        private decimal sum;

        [Column]
        public decimal Sum
        {
            get { return sum; }
            set
            {
                if (sum == value) return;

                NotifyPropertyChanging("Sum");
                sum = value;
                NotifyPropertyChanged("Sum");

            }
        }

        private DateTime date;

        [Column]
        public DateTime Date { get { return date; }
            set
            {
                if (date == value) return;

                NotifyPropertyChanging("Date");
                date = value;
                NotifyPropertyChanged("Date");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        public event PropertyChangingEventHandler PropertyChanging;

        private void NotifyPropertyChanging(string propertyName)
        {
            if (PropertyChanging != null)
            {
                PropertyChanging(this, new PropertyChangingEventArgs(propertyName));
            }
        }
    }
}

费用自定义为存储在手机的本地数据库中。

我实际上使用相同的代码(由Blend生成),其中样本数据在设计时间内完美显示。有没有人知道为什么它没有这个代码?

1 个答案:

答案 0 :(得分:1)

如果DesignSke​​tch不在当前程序集中,则更改此行

    xmlns:viewModels2="clr-namespace:DesignSketch"

    xmlns:viewModels2="clr-namespace:DesignSketch;assembly=NameOfAssemblyThatHoldsDesignSketch"