2014-06-04 6 views
0

Windows Phone 런타임 응용 프로그램이있어서 Expression Blend를 사용하여 디자인 타임 데이터를 생성하는 데 지쳐있었습니다. 문제는 일부 클래스가 클래스를 중첩하여 디자인 데이터가 컴파일되지 않는다는 것입니다. 다음은 디자인 타임 데이터를 생성하는 데 사용하는 클래스입니다.xaml 응용 프로그램의 디자인 타임 데이터 만들기

public class stats 
{ 
    public class Pageviews 
    { 
     public int regular { get; set; } 
     public int threat { get; set; } 
     public int crawler { get; set; } 
    } 

    public class Uniques 
    { 
     public int regular { get; set; } 
     public int threat { get; set; } 
     public int crawler { get; set; } 
    } 

    public class TrafficBreakdown 
    { 
     public Pageviews pageviews { get; set; } 
     public bool estimated { get; set; } 
     public Uniques uniques { get; set; } 
    } 

    public class BandwidthServed 
    { 
     public double cloudflare { get; set; } 
     public double user { get; set; } 
    } 

    public class RequestsServed 
    { 
     public int cloudflare { get; set; } 
     public int user { get; set; } 
    } 

    public class Obj 
    { 
     public long cachedServerTime { get; set; } 
     public long cachedExpryTime { get; set; } 
     public TrafficBreakdown trafficBreakdown { get; set; } 
     public BandwidthServed bandwidthServed { get; set; } 
     public RequestsServed requestsServed { get; set; } 
     public bool pro_zone { get; set; } 
     public long currentServerTime { get; set; } 
     public int interval { get; set; } 
     public long zoneCDate { get; set; } 
     public string userSecuritySetting { get; set; } 
     public int dev_mode { get; set; } 
     public int ipv46 { get; set; } 
     public int ob { get; set; } 
     public string cache_lvl { get; set; } 
     public string outboundLinks { get; set; } 
    } 

    public class Result 
    { 
     public long timeZero { get; set; } 
     public long timeEnd { get; set; } 
     public int count { get; set; } 
     public bool has_more { get; set; } 
     public List<Obj> objs { get; set; } 
    } 

    public class Response 
    { 
     public Result result { get; set; } 
    } 

    public class RootObject 
    { 
     public Response response { get; set; } 
     public string result { get; set; } 
     public string msg { get; set; } 
     public string err_code { get; set; } 
    } 
} 

다음은 디자인 타임 .xaml 파일입니다.

<ViewModels:MainViewModel.Stats> 
    <Data:stats+Obj cache_lvl="Adipiscing nam phasellus" dev_mode="83" ipv46="75" interval="55" ob="47" outboundLinks="Parturient class aliquam vestibulum vestibulum" pro_zone="False" userSecuritySetting="Cras vestibulum curabitur"> 
     <Data:stats+Obj.bandwidthServed> 
      <Data:stats+BandwidthServed cloudflare="500.26" user="349.37"/> 
     </Data:stats+Obj.bandwidthServed> 
     <Data:stats+Obj.cachedServerTime> 
      <System:Int64/> 
     </Data:stats+Obj.cachedServerTime> 
     <Data:stats+Obj.cachedExpryTime> 
      <System:Int64/> 
     </Data:stats+Obj.cachedExpryTime> 
     <Data:stats+Obj.currentServerTime> 
      <System:Int64/> 
     </Data:stats+Obj.currentServerTime> 
     <Data:stats+Obj.requestsServed> 
      <Data:stats+RequestsServed cloudflare="18" user="44"/> 
     </Data:stats+Obj.requestsServed> 
     <Data:stats+Obj.trafficBreakdown> 
      <Data:stats+TrafficBreakdown estimated="True"> 
       <Data:stats+TrafficBreakdown.pageviews> 
        <Data:stats+Pageviews crawler="10" regular="41" threat="19"/> 
       </Data:stats+TrafficBreakdown.pageviews> 
       <Data:stats+TrafficBreakdown.uniques> 
        <Data:stats+Uniques crawler="99" regular="66" threat="39"/> 
       </Data:stats+TrafficBreakdown.uniques> 
      </Data:stats+TrafficBreakdown> 
     </Data:stats+Obj.trafficBreakdown> 
     <Data:stats+Obj.zoneCDate> 
      <System:Int64/> 
     </Data:stats+Obj.zoneCDate> 
    </Data:stats+Obj> 
</ViewModels:MainViewModel.Stats> 

그것은 통계 + .OBJ는 이름에 유효하지 않은 것을 말한다. 누구든지 해결책있어?

미리 감사드립니다.

답변

1

첫 번째 문제점은 XML 이름에 + 문자가 올바르지 않다는 것입니다.

편집 : 블렌드의 디자인 탭을 사용하여 클래스에서 샘플 데이터를 생성하십시오. 디자인 탭에서 "클래스의 샘플 데이터 생성"을 클릭하고 루트 클래스를 선택하십시오. 나는 당신의 클래스를 생성 샘플 데이터 :

<App7:Obj.bandwidthServed> 
    <App7:BandwidthServed cloudflare="130.23" user="116.56"/> 
</App7:Obj.bandwidthServed> 
<App7:Obj.cachedServerTime> 
    <System:Int64/> 
</App7:Obj.cachedServerTime> 
<App7:Obj.cachedExpryTime> 
    <System:Int64/> 
</App7:Obj.cachedExpryTime> 
<App7:Obj.currentServerTime> 
    <System:Int64/> 
</App7:Obj.currentServerTime> 
<App7:Obj.requestsServed> 
    <App7:RequestsServed cloudflare="78" user="56"/> 
</App7:Obj.requestsServed> 
<App7:Obj.trafficBreakdown> 
    <App7:TrafficBreakdown estimated="True"> 
    <App7:TrafficBreakdown.pageviews> 
     <App7:Pageviews crawler="75" regular="13" threat="11"/> 
    </App7:TrafficBreakdown.pageviews> 
    <App7:TrafficBreakdown.uniques> 
     <App7:Uniques crawler="19" regular="76" threat="32"/> 
    </App7:TrafficBreakdown.uniques> 
    </App7:TrafficBreakdown> 
</App7:Obj.trafficBreakdown> 
<App7:Obj.zoneCDate> 
    <System:Int64/> 
</App7:Obj.zoneCDate> 
+0

중첩 클래스에 액세스하는 데 사용할 수있는 다른 문자는 무엇입니까? – sidy3d

+0

나는 나의 대답을 편집했다. –

+0

고마워도 작동 :) – sidy3d

1

은 왜 그냥 페이지의 DataContext를 사용하여 아래와 같이 POCO와 생성자에서 가짜 데이터를 생성하지 않습니다. VS 2103 설계자는 설계시 완벽한 데이터를 보여줍니다.

여기
public class BookVM : ViewModelBase 
{ 
    public BookVM() 
    { 
     if (IsInDesignMode) 
     { 
      var books = new List<Book>(); 
      books.Add(new Book(){ Name = "Test"}); 
      books.Add(new Book(){ Name = "Test2"}); 
      books.Add(new Book(){ Name = "Test3"}); 

      Books = books; 
     } 
    } 

    List<Person> _books; 
    public List<Person> BookList 
    { 
     get{ return _books;} 
     set 
     { 
      _books = value; 
      OnPropertyChanged(); 
     } 
    } 
} 

} 

내 ViewModelBase 클래스 뒤에 다음

public class ViewModelBase : INotifyPropertyChanged 
{ 
    public bool IsInDesignMode 
    { 
     get 
     { 
      return DesignMode.DesignModeEnabled; 
     } 
    } 

    bool _isBusy; 
    public bool IsBusy 
    { 
     get 
     { 
      return _isBusy; 
     } 
     set 
     { 
      _isBusy = value; 
      OnPropertyChanged(); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    public void OnPropertyChanged([CallerMemberName]string propertyName="") 
    { 
     var handler = PropertyChanged; 
     if (handler != null) 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 
+0

이것은 내가 전에 사용했던 해결책이었다, 나는 되돌릴 것이라고 생각한다. – sidy3d

0

그것은 당신의 클래스 선언은 다른 클래스 선언 내에있을 때 (중첩) 보인다

<Page.DataContext> 
    <ViewModel:BookVM /> 
</Page.DataContext> 

코드 XAML

입니다 XAML 엔진은이를 올바르게 참조 할 수 없습니다. 선언은 네임 스페이스의 루트에 있어야합니다. 이 버그라고 생각합니다.

관련 문제