0

SQLMetal.exeを使用してこのクラスを生成しました。これは実行時に非常にバインド可能ですが、このクラスをデザイン時に使用すると、すべてのデザイン時ブレンドバインディングが破棄されます。誰もがデザインタイムデータソースでこの特定のクラスを使用すると、すべてのデザインタイムバインディングが破損すると思いますか?

私はMVVM-Lightフレームワークを使用しています。私はWP7用のアプリケーションを構築しています。

このクラスのインターフェイスを抽出し、このインターフェイスを実装する単純なPOCOを作成し、デザインタイムデータソースに単純なpocoを使用すると、すべてのバインディングが有効になります。

ここには、SQLMetal.exeによって生成されたクラスがあります。

[Table(Name="InspectionGroup")] 
public partial class InspectionGroup : INotifyPropertyChanging, INotifyPropertyChanged, IInspectionGroup 
{ 

    private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty); 

    private int _InspectionGroupId; 

    private string _GroupName; 

    private System.DateTime _DateCreated; 

    private EntitySet<InspectionHeader> _InspectionHeaders; 

    private EntitySet<InspectionPoint> _InspectionPoints; 

    #region Extensibility Method Definitions 
    partial void OnLoaded(); 
    partial void OnValidate(System.Data.Linq.ChangeAction action); 
    partial void OnCreated(); 
    partial void OnInspectionGroupIdChanging(int value); 
    partial void OnInspectionGroupIdChanged(); 
    partial void OnGroupNameChanging(string value); 
    partial void OnGroupNameChanged(); 
    partial void OnDateCreatedChanging(System.DateTime value); 
    partial void OnDateCreatedChanged(); 
    #endregion 

    public InspectionGroup() 
    { 
     this._InspectionHeaders = new EntitySet<InspectionHeader>(new Action<InspectionHeader>(this.attach_InspectionHeaders), new Action<InspectionHeader>(this.detach_InspectionHeaders)); 
     this._InspectionPoints = new EntitySet<InspectionPoint>(new Action<InspectionPoint>(this.attach_InspectionPoints), new Action<InspectionPoint>(this.detach_InspectionPoints)); 
     OnCreated(); 
    } 

    [Column(Storage = "_InspectionGroupId", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)] 
    public int InspectionGroupId 
    { 
     get 
     { 
      return this._InspectionGroupId; 
     } 
     set 
     { 
      if ((this._InspectionGroupId != value)) 
      { 
       this.OnInspectionGroupIdChanging(value); 
       this.SendPropertyChanging(); 
       this._InspectionGroupId = value; 
       this.SendPropertyChanged("InspectionGroupId"); 
       this.OnInspectionGroupIdChanged(); 
      } 
     } 
    } 

    [Column(Storage = "_GroupName", DbType = "NVarChar(100) NOT NULL", CanBeNull = false)] 
    public string GroupName 
    { 
     get 
     { 
      return this._GroupName; 
     } 
     set 
     { 
      if ((this._GroupName != value)) 
      { 
       this.OnGroupNameChanging(value); 
       this.SendPropertyChanging(); 
       this._GroupName = value; 
       this.SendPropertyChanged("GroupName"); 
       this.OnGroupNameChanged(); 
      } 
     } 
    } 

    [Column(Storage = "_DateCreated", DbType = "DateTime NOT NULL")] 
    public System.DateTime DateCreated 
    { 
     get 
     { 
      return this._DateCreated; 
     } 
     set 
     { 
      if ((this._DateCreated != value)) 
      { 
       this.OnDateCreatedChanging(value); 
       this.SendPropertyChanging(); 
       this._DateCreated = value; 
       this.SendPropertyChanged("DateCreated"); 
       this.OnDateCreatedChanged(); 
      } 
     } 
    } 

    [Association(Name = "FK_InspectionHeader_InspectionGroup", Storage = "_InspectionHeaders", ThisKey = "InspectionGroupId", OtherKey = "InspectionGroupId", DeleteRule = "CASCADE")] 
    public EntitySet<InspectionHeader> InspectionHeaders 
    { 
     get 
     { 
      return this._InspectionHeaders; 
     } 
     set 
     { 
      this._InspectionHeaders.Assign(value); 
     } 
    } 

    [Association(Name = "FK_InspectionPoint_InspectionGroup", Storage = "_InspectionPoints", ThisKey = "InspectionGroupId", OtherKey = "InspectionGroupId", DeleteRule = "CASCADE")] 
    public EntitySet<InspectionPoint> InspectionPoints 
    { 
     get 
     { 
      return this._InspectionPoints; 
     } 
     set 
     { 
      this._InspectionPoints.Assign(value); 
     } 
    } 

    public event PropertyChangingEventHandler PropertyChanging; 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void SendPropertyChanging() 
    { 
     if ((this.PropertyChanging != null)) 
     { 
      this.PropertyChanging(this, emptyChangingEventArgs); 
     } 
    } 

    protected virtual void SendPropertyChanged(String propertyName) 
    { 
     if ((this.PropertyChanged != null)) 
     { 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    private void attach_InspectionHeaders(InspectionHeader entity) 
    { 
     this.SendPropertyChanging(); 
     entity.InspectionGroup = this; 
    } 

    private void detach_InspectionHeaders(InspectionHeader entity) 
    { 
     this.SendPropertyChanging(); 
     entity.InspectionGroup = null; 
    } 

    private void attach_InspectionPoints(InspectionPoint entity) 
    { 
     this.SendPropertyChanging(); 
     entity.InspectionGroup = this; 
    } 

    private void detach_InspectionPoints(InspectionPoint entity) 
    { 
     this.SendPropertyChanging(); 
     entity.InspectionGroup = null; 
    } 
} 

答えて

1

ちょうど同じ問題を抱えていた - 私はINotifyPropertyChangingのものがdesigtimeでサポートされていないと信じて、このインターフェイスは、データベース上の生活を楽にするために設計されています。あなたがBlind(あるいは私の場合はVS xamlビジュアルエディタ)で働かせることができません。

PropertyChangingの実装をコメントアウトすると、もちろんプリプロセッサIFDEFのようなものになります。その部分には良いアイデアはありません。私はコードにコメントします

+0

私は同じことをして、INSTifyPropertyChanging – CedricB

+0

をコメントしました。後でその行のコメントを外すことを忘れないでください。私は、半日で、1つではないエラーを見つけようとします。 –

0

設計時にデータベース、非同期サービスなどの呼び出しが行われないためです。 ViewModelのIsInDesignModeStaticプロパティを使用して、設計時または実行時のモードを判断します。

実行時に、サービスを呼び出してデータを取得します。設計時には、サービスをシミュレートしたり、コレクションにオブジェクトを追加したり、自分自身でデータコンテキストを作成したりすることができます。これにより、UIをより適切に設計できます。ただし、これは厳密には必要ではありませんが、通常は「ブレンド可能性」と呼ばれています。

ローランのウェブサイトにサンプルがあり、彼のMIX 10ビデオもこの点で家に帰る。

this postも参照してください。非同期呼び出しで同じ問題が発生しています。

サンプル(ニックを入れ形Danielが、共通の知識:

MainViewModel() 
{ 
    if(!IsInDesignMode) 
    { 
     //pull data from service 
    } 
} 
+0

上に掲載されたコードは、db呼び出しや非同期呼び出しをdoensntするのですか? INotifyPropertyChangingの実装がその害を引き起こしているようです。なぜ私は不思議です。 INotifyPropertyChangingのすべての実装をコメントアウトすると、コードはブレンドによってサポートされているようです。 – CedricB

関連する問題