私はMvvmLight v4(NuGet経由でインストールされた.NET 4ビルド、v4.0.0.0/BL0016)で発生している奇妙な小さなバグを持っています。私のプロジェクトでは、(ViewModelBaseを継承する)ビューモデルがキャンバスに描画されたビジュアル要素を表しています。このビューモデルには、一般的なTop/Left/Width/Heightプロパティがあり、それぞれRaisePropertyChangedを呼び出します。さまざまなイベントに応答してリリースビルドでRaisePropertyChangedエラーが発生しましたか?
public double Width
{
get { return _width; }
set
{
if (Math.Abs(_width - value) < DeltaEpsilon)
{
return;
}
_width = value;
RaisePropertyChanged();
}
}
、ビューモデルは、視覚要素の位置と大きさを算出する方法を有しており、適切な特性を設定する:
public void CalculateSize()
{
Width = DoSomeCalculation();
// Calculate other settings...
}
私はいくつかのユニットテストを持っています計算が正しく行われていることを確認する場所。デバッグモードで実行すると、テストは正常に実行されます。しかし、私はリリースモードで実行する場合、テストは以下の例外を除いて、失敗:
SetUp : System.InvalidOperationException : This method can only by invoked within a property setter.
at GalaSoft.MvvmLight.ObservableObject.RaisePropertyChanged()
at MyProject.ViewModels.TableViewModel.CalculateSize() in TableViewModel.cs: line 154
どこTableViewModel上の線154は、幅= DoSomeCalculation()ラインです。言い換えれば、私のメソッドがプロパティの値を設定しようとすると、MvvmLightはプロパティセッター内からRaisePropertyChangedを呼び出していないと訴えます。私は(Reshaperのテストデバッガを使用して)テストをデバッグしようとしましたが、私がデバッガを実行すると、テストは合格します(おそらく、リリースモードであっても、Resharperでデバッグモードにユニットテストをデバッグします)。アプリケーション自体に
リリースモードがコードを壊す理由についてのアイデアはありますか?コンパイラがObservableObjectのRaisePropertyChanged()メソッドでStackTraceの使用を中断するコードを最適化する方法がありますか?上記の例外は、Widthセッターが入力されていることを示していないので、CalculateSizeメソッドから例外に直接ジャンプします。
ナッツ、ちょうどhttp://mvvmlight.codeplex.com/workitem/7520を見つけました。それは私の問題です、確かに十分です。 –