50

アーキテクチャ的には、WPF は非常に優れていると思います。概して、私はレンダリングとアニメーションの内部構造の根底にあるものの大ファンです。テンプレートとスタイリングの設定の柔軟性は非常に印象的です。

しかし、私は XAML が大嫌いです。XAML は多くのことを複雑にしているように感じます。私は大小さまざまなアプリケーションでそれを使用してきましたが、XAML で何かを行う方法を理解しようとして、基本的な原則は基本的ですが、構文は風変わりです。それだけでなく、解析/バインディングの特定の部分がどれほど重いのか、何度も疑問に思いました。(コンパイルされていることは知っていますが、実行時にどれだけ評価されるかはわかりません)

XAML は、ビジュアル ツリーを構築して読み込む方法の 1 つにすぎません。非 XML のコードベース (ただし、大部分は宣言型) の方法でビジュアル ツリーの構築を簡素化するためのフレームワークはありますか? 具体的には、MVVM アプローチを維持しながら、次の問題のいずれかを軽減するフレームワークに興味があります。

  1. 強く型付けされたバインディング。ViewModel が特定の型に準拠する必要があることを指定します。BaseBinding はボンネットの下でリフレクションを使用していると思いますが、その速度については少し懐疑的です。壊れたバインディングが煩わしいことは言うまでもありません。

  2. 結束が速く、非INotifyPropertyChanged結束。BindableProperty<T>ViewModel プロパティのすべての変更を受け取るのではなく、ある種のものが作成され、バインディングがそれを直接リッスンする可能性があるようです。また、文字列引数よりも直接コールバックを使用する方が有利なようです。

  3. リソース管理への別のアプローチ。繰り返しになりますが、ある種の厳密に型指定された辞書は非常に優れています。スタイルをラムダまたは強く型付けされた側面をキャプチャするものとして見たいと思っています。

要約すると、非 XAML ベースで、MVVM に適合し、厳密に型指定されているフレームワークはありますか?

4

5 に答える 5

31

Xaml フリーの WPF でサポートします。私は WPF のレイアウト機能とバインディング機能が大好きですが、XAML も嫌いです。WPF がプレーンな C# で記述できることを望みます。いくつかの利点があります。

  • オブジェクトとコレクションの初期化子は、Xaml のインスタンス化を置き換えることができます。(xaml がボタンアップよりもトップダウンを好むのは残念です)。
  • バインディング コンバーターは単なるラムダである可能性があります。
  • スタイルは、インスタンス化後にオブジェクトを変更する単なるラムダであり、肥大化した<Setter>構文はありません。
  • DataTemplatesは、オブジェクトを指定してコントロールを作成する単なるラムダです。
  • DataTemplateSelectorsは、他の DataTemplate を呼び出す単なる DataTemplate ラムダになります。
  • ItemsControlは、ラムダ (DataTemplate) を受け取り、基になるコレクションに新しい項目が追加された場合に再度呼び出す Foreach になります。
  • x:Namesは単なる変数名になります。
  • 多くの MarkupExtensions は必要ありません
    • x:静的
    • x:Type (特に複雑なジェネリックも!)
  • UserControlsは単なる関数です。

WPF を設計するには、あまりにも多くの複雑さが追加されたと思います。Web 開発は、昔の FrontPage から Razor まで、すでにこの戦いに敗れています。

于 2012-01-25T08:52:14.503 に答える
6

この質問には、BlingUIToolkitへのリンクが間違いなく必要です。これは、WPF上にアニメーションと豊富なUIプロトタイピングを行うための非常に優れた高レベルのライブラリです。とのバインディングbutton.Width = 100 - slider.Value、次のようなアニメーション:button.Left.Animate().Duration(500).To = label.Right、ピクセルシェーダーコンパイラ-すばらしい。

悲しいことに、私はプロジェクトがもう取り組んでいないと思います。しかし、思考の糧を与えるための非常に賢いアイデアがたくさんあります。

于 2012-05-26T22:25:44.973 に答える
2

WPFにはこのようなフレームワークはありません。ウィッシュリストで言及する3つのことは、WPFによって既に提供されているコンポーネントの直接(および異なる)置換です。また、バインディングシステムとリソースシステムをバージョンに置き換えると、バインディングやリソースなどに大きく依存するため、WPFの好きなもの(アニメーション、テンプレートなど)が使用できなくなります。

ここにあなたの経験を改善するかもしれないいくつかの提案があります。
1. XAMLの扱い方を学びます(以前はその根性も嫌いでしたが、今では素晴らしいものに慣れています)
2.コードでUIを簡単に作成できる独自のライブラリを構築します。結局のところ、XAMLで行われることはすべて、コードでも同様に行うことができます。
3. INotifyPropertyChangedが本当に嫌いで、代わりにコールバックが必要な場合は、代わりにDependencyPropertyを使用してください。発生させるイベントはありません。コールバックとデフォルト値を設定できます。
4.)WPFを使用しないでください。あなたがアーキテクチャを愛しているとあなたが言ったとしても、あなたの欠点/望ましい「改善」のリストはそれのほとんどすべてをカバーしています。

于 2011-04-20T15:19:45.657 に答える
1
> non-INotifyPropertyChanged binding.

viewmodellまたはmodellにINotifyPropertyChangedを手動で実装することは、非常に多くの手動/反復作業です。しかし、私はこれらの選択肢について読みました

  • DynamicViewModel:.NET 4.0でPOCOを使用するMVVM:このプロジェクトは、.NET 4.0 DynamicObjectクラスを最大限に活用しながら、Plain Old CLR Objects(POCO)を使用してModel View ViewModel(MVVM)アーキテクチャパターンを実装する方法を提供することを目的としています。.NET 4.0とDynamicObjectクラスを利用して、DynamicObjectクラスから派生した型を作成し、実行時に動的な動作を指定できます。さらに、派生型にINotifyPropertyChangedインターフェイスを実装して、データバインディングの候補にすることができます。

  • Update Controls .NET:INotifyPropertyChangedを使用しないWPFおよびSilverlightデータバインディング。依存関係を自動的に検出するため、ビューモデルで依存関係を管理する必要はありません。そしてそれはWinformsで動作します。イベントを使用してコードをバインドします。

  • notifypropertyweaver:ILウィービング( http://www.mono-project.com/Cecil経由)を使用して、INotifyPropertyChangedコードをプロパティに挿入します。

    • 属性は必要ありません
    • 参照は必要ありません
    • 基本クラスは必要ありません
    • .net 3.5、.net 4、Silverlight 3、Silverlight 4、およびWindowsPhone7をサポートします
    • クライアントプロファイルモードをサポート
于 2011-04-20T16:28:52.150 に答える