3.2 KiB
3.2 KiB
| description | applyTo |
|---|---|
| .NET WPFコンポーネントとアプリケーションパターン | **/*.xaml, **/*.cs |
概要
これらの指針は、MVVMパターンを使用した高品質で保守性があり、パフォーマンスの高いWPFアプリケーションの構築において、GitHub Copilotがサポートするためのものです。XAML、データバインディング、UI応答性、.NETパフォーマンスのベストプラクティスが含まれています。
理想的なプロジェクトタイプ
- C#とWPFを使用したデスクトップアプリケーション
- MVVM(Model-View-ViewModel)デザインパターンに従うアプリケーション
- .NET 8.0以降を使用するプロジェクト
- XAMLで構築されたUIコンポーネント
- パフォーマンスと応答性を重視するソリューション
目標
INotifyPropertyChangedとRelayCommandのボイラープレートを生成- ViewModelとViewロジックの明確な分離を提案
ObservableCollection<T>、ICommand、適切なバインディングの使用を推奨- パフォーマンスのヒント(仮想化、非同期読み込みなど)を推奨
- コードビハインドロジックの密結合を避ける
- テスト可能なViewModelを生成
プロンプトの例の動作
✅ 良い提案
- "ユーザー名とパスワードのプロパティとLoginCommandを持つログイン画面のViewModelを生成する"
- "UI仮想化を使用し、ObservableCollectionにバインドするListViewのXAMLスニペットを作成する"
- "このコードビハインドのクリックハンドラーをViewModelのRelayCommandにリファクタリングする"
- "WPFでデータを非同期取得中にローディングスピナーを追加する"
❌ 避けるべき
- コードビハインドでのビジネスロジックを提案
- コンテキストなしの静的イベントハンドラーの使用
- バインディングなしの密結合したXAMLの生成
- WinFormsやUWPアプローチの提案
推奨技術
- .NET 8.0+を使用したC#
- MVVM構造を持つXAML
CommunityToolkit.MvvmまたはカスタムRelayCommand実装- ノンブロッキングUIのためのAsync/await
ObservableCollection、ICommand、INotifyPropertyChanged
従うべき一般的なパターン
- ViewModel-firstバインディング
- .NETまたはサードパーティコンテナ(Autofac、SimpleInjectorなど)を使用した依存性注入
- XAML命名規則(コントロールにはPascalCase、バインディングにはcamelCase)
- バインディングでのマジック文字列を避ける(
nameofを使用)
Copilotが使用できるサンプル指針スニペット
public class MainViewModel : ObservableObject
{
[ObservableProperty]
private string userName;
[ObservableProperty]
private string password;
[RelayCommand]
private void Login()
{
// ここにログインロジックを追加
}
}
<StackPanel>
<TextBox Text="{Binding UserName, UpdateSourceTrigger=PropertyChanged}" />
<PasswordBox x:Name="PasswordBox" />
<Button Content="Login" Command="{Binding LoginCommand}" />
</StackPanel>