問題タブ [design-data]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wpf - MVVM パターンでの WPF 設計データの使用
包括的な単体テストを可能にするために、WPF アプリケーションで MVVM パターンを使用しています。MVVM パターン自体はうまく機能していますが、WPF の設計時のデータ サポートを使用できるようにパターンを適応させるのに苦労しています。
Prism を使用しているため、ViewModel インスタンスは通常、ビューのコンストラクターに挿入されます。
次に、ViewModel の依存関係がコンストラクターに注入されます。
これは一般的に、デザイン データの場合を除いて非常にうまく機能しています。デザイン データ固有のクラスをリリース済みのアセンブリにコンパイルすることは避けたかったので、{d:DesignData}
アプローチの代わりにアプローチを使用することにしました{d:DesignInstance}
が、これが正しく機能するためには、 ViewModel には、パラメーターなしのコンストラクターが必要になりました。さらに、XAML でこれらのプロパティを設定できるようにするために、追加のプロパティを変更してセッターを持たせるか、変更可能なコレクションにする必要があることもよくあります。
これは私を心配しています:
- 呼び出されることを意図しておらず、単体テストされていないパラメーターなしのコンストラクターがあります
- ViewModel 自体のみが呼び出す必要があるプロパティのセッターがあります。
- 私の ViewModel は、ビューによって変更されるべきプロパティと変更されるべきでないプロパティがごちゃまぜに混ざり合ったものになりました。
- 設計時に特定のプロパティを設定すると (
Filter
テキストのスタイルを確認するなど)、実際には ViewModel ロジックが呼び出される場合があります。(したがって、私の ViewModel は、そうでなければ必須の依存関係が設計時に欠落していることにも寛容である必要があります)
このように ViewModel を危険にさらさない方法で、WPF MVVM アプリケーションで設計時のデータを取得するより良い方法はありますか?
または、別の場所でロジックが分離されたより単純なプロパティを持つように、ViewModel を別の方法で構築する必要があります。
wpf - d:DesignData FileNotFoundException
DesignData を使用して、デザイン タイムに ItemsControl を作成しようとしています。
ファイル /DesignData/SampleAlerts.xaml の内容は次のとおりです。
また、ファイル /DesignData/SampleAlerts.xaml のビルド アクションは DesignData に設定されます。
このデザイン データを UI で使用しようとすると、次のようになります。
VisualStudio ではすべて正常にビルドされますが、ビジュアル スタジオ デザイナーで次の例外が発生します。
また、Blend ではすべてが正常にビルドされますが、デザイナーには次のエラーが表示されます。 - タイプ 'AlertSource' は抽象的であり、明示的な値を含める必要があります。Ln 1 Col 0 - メンバー「Alerts」が認識されていないか、アクセスできません。Ln 7 列 4
タイプ AlertSource および AlertBase は、次のスケルトンを持つ抽象クラスです。
と
誰かがこの問題を解決する方法を知っていますか?
c# - ビルドに含めずに WPF で DesignData を使用する
次のように d:DataContext にバインドされた設計時のビュー モデルがいくつかあります。
からまでBuild Action
のすべてを変更しましたViewModel
Compile
DesignDataWithDesignTimeCreatableTypes
設計時に動作していますが、コンパイルしようとすると次のエラーが発生します。
サンプル データがアセンブリに添付されないようにするにはどうすればよいですか? それとも、これは必要ではなく、コンパイラーは、Compile
設定してもデフォルトでこれらのファイルを実行可能ファイルに含めませんか?
// 編集:
DesignTime
また、空のクラスを名前空間に作成すると、すべてが機能し、コンパイルされます。
しかし、名前空間を変更したり、コンパイル時に空の名前空間を提供したりせずにそれを行うことはできますか?
c# - XAML デザイン データと StaticResources / CollectionViews
私はデザイン時の XAML データを数週間使用してきましたが、リソースとして宣言されたコレクション ビューに基づいてリスト ボックスに項目を表示する現在のケースなどを除いて、正常に動作しているようです。
基本的には「モノ」をカテゴリ別にまとめた一覧を表示したい。
そして、ダミークラス ListOfThings を介してこれを公開します
次のようなデータ用のダミー XAML ファイルがあります (XMLFile1.xaml)。
ウィンドウには、各グループのエキスパンダーのグループ スタイルを含むリスト ボックスがあります。
これは実行時に機能します (ListOfThings のインスタンスを作成し、XAML 設計データと同じ構造を持つように Observable コレクションを設定します) が、設計時には何も得られません。
コレクションビューではなく、物事の ObservableCollection に直接バインドするように ItemSource を変更すると、機能しますが、もちろんグループ化されません。
静的リソースは設計時に使用できないという点で誤解されていますか? したがって、コレクションビューへのバインディングがレンダリングされないのはなぜですか?
または、Source へのバインド構文が正しくありませんか?
c# - DesignData を使用してコンボボックスで SelectedItem 要素を指定する方法は?
私は WPF でアプリケーションを実行しており、アプリケーションの起動が遅いプロセスであるため、DesignData を使用して UI 作成プロセスを高速化しています。
designdata を使用してコンボボックスの SelectedItem を設定する方法が見つかりません。次の例を確認してください。
XAML:
ビューモデル:
そしてデザインデータ:
コンボボックスは利用可能な項目コレクションから要素を受け取ることを期待しているようですが、designdata ファイルからそれらの要素の 1 つを参照する方法がわかりません。
ヒントはありますか?
c# - ロードされたページ リソースのデザイン モード エラー「オブジェクトがターゲット タイプと一致しません」
現在、ViewModel のデザイン データを利用して、ビューのデータをモックアップしようとしています。具体的には、Silverlight アプリケーション用の View フロント エンドと ViewModel バックエンドがあります。
他のビューをモックアップしたとき、物事は完全に機能しました。この特定のビューでも、唯一の問題はコレクションにあるようです。
「CategoryName」に値を割り当てようとすると、「CategoryItem」でエラーが発生し続けるのはなぜですか? 何が問題を引き起こしているのかわかりません...
以下のコード:
私の設計データ:
私の単純化されたViewModel:
最後に、私の(簡略化された)ビュー:
c# - Windows ユニバーサル コレクションでの DesignData の使用
非常に単純なケースであるはずの DesignData に苦労しています。Windows ユニバーサル プロジェクトで次の簡単なコントロールを定義しました。
クラスは次のように定義されています。
型 ElementCollection の要素「コレクション」が codeBehind で定義され、有効なバインディング ソースが提供されます。
Single.xaml は簡単です:
複数も同様です。
Designer で表示すると、上記の設計データが表示されます。実際、コントロールは、グリッドの最初の行に名前として「Single」を正しく表示します。ただし、コントロールはグリッドの 2 行目に何も表示しません。
明らかな何かが明らかに欠けています...
c# - WPF でのデザイン データへのバインド
ListBox を含む WPF ウィンドウがあります。ItemsSource は、ビュー モデルのプロパティにバインドされます。
ビュー モデルのプロパティは、カスタム インターフェイスの監視可能なコレクションです。ISomeInterface. インターフェイスは非常に単純で、ToString をさらにオーバーライドする SomeClass によって実装されます。
Visual Studio 2015 または Blend でウィンドウを表示すると、すべてが期待どおりです。ToString が呼び出され、ListBox が設定されます。
デザイン モードで使用する XAML デザイン データを作成しました。SampleData というディレクトリに設計データを追加しました。最初の DataContext のすぐ下のウィンドウ XAML に、デザイン datacontext ステートメントを追加します。
これはうまくいきません。ソース パスに何を使用しても、Visual Studio と Blend は「ファイルまたはプロジェクト項目が見つかりません」と報告します。/SampleData/Data.xaml、SampleData/Data.xaml、../SampleData/Data.xaml、./../SampleData/Data.xaml を試しました
Visual Studio と Blend は、Data.xaml を SampleData ディレクトリからプロジェクト ルートに移動した場合にのみ検出します。次に、ソース パス /Data.xaml または Data.xaml を使用して参照できます。/ を前に付けずに Data.xaml を使用すると、Visual Studio と Blend はファイルが見つからないと報告しますが、とにかく見つけます。
私の最初の質問は..サブディレクトリでサンプルデータを使用できますか? もしそうなら、どのように?
プロジェクト ルートで Data.xaml を正常に参照した後、ウィンドウがオーバーライドされた ToString を呼び出していないため、クラス名のリストが表示されます。リストには設計データと同じ数のアイテムが含まれているため、設計データを使用しているように見えます。
私の 2 番目の質問は..オブジェクトがコードからインスタンス化されている場合に、オーバーライドされた ToString がここで呼び出されないのはなぜですか?
アイテム テンプレートを指定することで、目的の結果が得られることを認識しています。
サンプル アプリケーションの完全なソースは、github で入手できます。
https://github.com/DangerousDarlow/WpfDesignData
アップデート
答えてくれたjstreetに感謝します。サブディレクトリにあるdata.xamlのファイルプロパティを変更したところ、デザインデータとして使えるようになりました。私は以前にこれを試したことがあると思っていましたが、間違っているに違いありません。
ToString が呼び出されているのをまだ見ていません。ビュー モデル プロパティをList<object>
andに変更しようとしList<ISomeInterface>
ましたが、どちらも object.ToString; に呼び出されました。クラス名の表示から推測されます。とにかく ToString を使用しないので、この時点で見るのをやめて、表示したいプロパティにバインドします。ただし、動作の違いを説明することは良いでしょう。
Visual Studio 2015 コミュニティ エディションを使用しています。