2013-04-03 46 views
4

我使用Blend for VS 2012来创建WP7.8应用程序的模板。有一些示例数据(位于单独的xaml文件中,请参见下方),这些数据在Silverlight页面上以设计模式正确显示。更改此数据(使用名称空间和类名称)会导致编辑器错误,并且新数据不再在设计模式中显示。 (List组件被示出为空)设计时错误(未找到可附加属性x)

页面的主要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}" 

设计模式绑定。 Howerever错误(提示)被示出“在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和费用都位于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生成),其中样本数据在设计时间内完美显示。有人知道为什么它不是这个代码吗?

+0

是MainViewModelSampleData和ExpensesPageVM在同一个项目? – termit

回答

1

如果DesignSke​​tch是不是在目前的组装,那么这行

xmlns:viewModels2="clr-namespace:DesignSketch" 

改变

xmlns:viewModels2="clr-namespace:DesignSketch;assembly=NameOfAssemblyThatHoldsDesignSketch" 
相关问题