VS2013 で利用できる新しい xaml 編集機能に関する次のブログ記事を読みました。
データ バインディングの Intellisense は、私が長年求めていたものなので、試してみましたが、残念ながらエラー リストにエラーが返されます (ただし、ビルドは正常に行われます)。
これは、UserControl 宣言/タグに追加したものです。
d:DataContext="{d:DesignInstance Type=lTemplates:TemplateEditorCustomVM}"
これはリストのエラーです:
エラー 95 アクセスが拒否されました:
System.Collections.ObjectModel.ObservableCollection'1[_.di1.TemplateEditorCustomVM+TemplateCriteriaVM]'.
何をしようとしているのか完全にはわかりません。両方のクラスがパブリックとして宣言されています (メイン ビュー モデルとネストされたクラス)。
誰でもアイデアはありますか?
そうでない場合でも、リソース キー インテリセンスが機能しているように見えるので、それは世界の終わりではありません。これは依然として大きなボーナスです。
編集
OK - ネストされたクラスを public 名前空間に移動したところ、VS からより詳細なエラーが表示されました。
エラー 64
Attempt by method '_.di1.Templates.TemplateEditorCustomVM..ctor()' to access method 'System.ComponentModel.BindingList'1<System.__Canon>..ctor()'
が失敗しました。
私は少し混乱しています。
まず、インテリセンスが VM クラスをインスタンス化する必要があるのはなぜですか。それが気にする必要があるのは、使用可能なプロパティとその型だけです。これらはすべてリフレクションで取得できます。
第二に、アプリケーションの起動時に正常に実行されたときにエラーが発生する理由がわかりません。
デザイナーが何をしようとしているのかを確認するために、Visual Studio 自体をデバッグしてデザイナーを実行するという古いトリックを実行する必要があるかもしれません...
さらに編集
そうです、BindingList プロパティを単純な List プロパティに変更しました (BindingList は WinForms 側のものであるため、これが何をするかを確認するために変更する価値があると思いました)。しかし、同様のエラーが発生しました:
エラー 64
Attempt by method '_.di3.Templates.TemplateEditorCustomVM..ctor()' to access method 'System.Collections.Generic.List'1<System.__Canon>..ctor()' failed.
System.__Canon で簡単にグーグルで検索しましたが、最適化の詳細は次のとおりです。
https://stackoverflow.com/a/16856205/182568
何が起こっているのかを突き止めるにはまだ近づいていませんが、まあ、私はさらに掘り下げ続けます.
編集 - レポができました
そうです、好奇心からこの問題を突き止めようと、VM の巨大なチャンクをコメントアウトし始めました。そして、問題を再現しているように見える VM クラスができました。
public class Nested
{
public class TestCheck
{
public int One { get; set; }
public int Two { get; set; }
}
}
public class SanityTestVM
{
public List<Nested.TestCheck> Test { get; set; }
}
与えます:
エラー 14 メソッドによる試行
'_.di14.Templates.SanityTestVM..ctor()' to access method 'System.Collections.Generic.List'1<System.__Canon>..ctor()' failed.
問題は、そのタイプのネストされたクラスを持つリストを持っているようです-通常のクラス(ネストされていない)の場合、すべて問題ありません。
これについては接続ケースを提出する必要があると思います-誰かがこれを確認できるようにする前に、Windows 8.1 マシンに 4 つのバージョンの VS があり、開発環境を除外したいだけです。