web-dev-qa-db-ja.com

XAMLまたはC#のコードビハインド

XAMLを使用したくない。私はすべてをC#でコーディングすることを好みますが、私は間違ったことをしていると思います。

どの場合にXAMLを使用する方が適切であり、いつC#を使用しますか?あなたの経験は何ですか?

45
user101375

C#でウィンドウ全体を作成すると、コードが煩雑になる可能性があります。 WPFの最も優れている点は、XAMLを使用すると、デザインをロジックから分離できるため、コードが非常に読みやすくなります。

動的なコントロールを作成する必要がある場合はC#を使用しますが、一般的なデザイン、静的なストーリーボード、スタイル、データテンプレートなどをXAMLに保持する傾向があります。

71
Will Eddins

WPFのMVVMで このビデオ を確認してください。 XAML、コードビハインド、その他の抽象化に対応するためにWPFアプリケーションを整理する方法を理解したい場合は、ここから始めるのが最適です。

27
JP Alioto

XAMLを使用すると、確実に行き過ぎることがあります。ユーザーインターフェイス全体(ロジック、イベント処理関係などを含む)をXAMLで定義することを望む人は、おそらく要点を逃しています。

XAMLの目的は、物事の方法を決定するための一般的な形式を提供することですlook。それは単に物事をどのようにレイアウトするか、どのように色付けし、視覚的にスタイルするかを説明するものでなければなりません。

C#には、プログラミング機能(再利用(型と関数の定義)、変数の参照、手続き型プログラミング、その他)の観点から、永続的な先導的な役割があるため、C#の他の側面の代替として使用することにはほとんど意味がありません。宣言的または機能的なスタイルでさえ。

個人的には、UIをLinq式と一緒に投げることが本当に好きです!

ボタンの子としてワークフローアクションを使用してClickハンドラーを提供し、プログラム全体がXAMLであるサンプルを見たところ、私は不条理に到達しました。それは「クール」に聞こえますが、問題は、同等のC#またはVB.NETプログラムよりもかなり醜く読みにくいため、C#で使用する準備ができているものはすべて、より冗長で不安定な同等のものに置き換える必要があります。この醜い構文への変換によって実際に得られたものは何もありません。同じプログラムであるだけで、もっと恐ろしいだけです。 XMLは、一般的なプログラミング言語の構文の基礎としては不十分です。大なり記号は>!として記述する必要があるという事実から始めます。

パラレルユニバースでは、MicrosoftはXAMLを完了する前にC#3.0をリリースしました。 XAMLチームは、構文としてXMLではなくC#3.0オブジェクト/リスト初期化子構文を採用しました。そして、この全体の議論は決して起こらなかった。

14

私の経験では、C#で実行する方がはるかに高速なものもあれば、XAMLで実行する方が高速なものもあります。 XAMLコードの1行でできることを行うために5行のC#コードが必要な場合、どちらが優れているかを選択するのは非常に簡単です。

11
John Fisher

基本的に、XAMLはビジュアルデザインを表現するためのもので、C#はロジックを表現するためのものです。

ビジュアルデザインはXAMLで実行し、ロジックはC#で実装する必要があります。

-これにより、ロジックの変更を心配することなく、デザイナーにビジュアルデザインを提供し、loose-XAMLを使用して実行時にビジュアルデザイン全体を置き換えることさえできます。

-これは、ロジックやビジュアルデザインを「壊す」ことなく置き換えることができることも意味します。

-2つの間の接続は、データバインディングとコマンドバインディングを使用して行う必要があります。

私が使用する習慣は次のとおりです。

1。別のC#コードでモデル(ビジネスデータオブジェクトモデル)を定義します。

2。 XAMLでビューの定数部分(ウィンドウ、メニューなどのグラフィカルユーザーインターフェイスの定数部分)を定義します(これには、VSではなくBlendを使用することが推奨されます)。
*ここではスタイル(色、フォントなど)を定義しないでください。
* XAMLの分離コードでボタンのイベントハンドラーを作成しないでください(ほとんどの場合)。代わりにコマンドバインディングを使用してください。

3。別のファイルにあるXAML "ResourceDictionary"を使用して、ビュー(データオブジェクトを表示/編集するためのGUI)内でモデルを表示する方法を定義します。

-ブレンドを使用して記述し、VSを使用してXAMLにバインディングを追加します(VS用のJetbrainsのResharperアドオンはバインディング式に役立ちます)。

-デザイン時にオブジェクトタイプが不明な場合は、「loose-XAML」を使用して、再コンパイルせずにファイルを追加/編集できるフォルダーにXAMLを配置できます。

4。 C#でモデルとビュー(コントローラー/ビューモデル)間の接続を作成します。
*必要に応じてビューを作成します(ダイナミクスオブジェクトの場合)
*ビューをモデルにデータバインドします(ビューのDataSourceをモデル内の関連オブジェクトとして設定します)
*コマンドを実装します
*コマンドは、ビューをそれ自体のコマンド実装にバインドします

5。 Application.xamlで、StartupUri = "MainWindow.xaml"を削除し、代わりにStartup = "ApplicaitonStartUp"を追加します。
ApplicationStartUp()イベントハンドラ内:
*持っている緩いXAMLをロードします
*コントローラを作成します
*メインウィンドウを作成します
*モデルを作成します
*コントローラをモデルとメインウィンドウに接続します
*メインウィンドウを表示
*(モデル、コントローラー、メインウィンドウをここのプライベートフィールドに保存して、それらがすべて維持されるようにします)

6。 ResourceDictionaryの下で別のXAMLファイルにスタイル(色、フォント)を追加します(このためにブレンドを使用するか、既製のXAMLテーマ/スキンファイルを購入します)。

8
Danny Varod

XAMLではなくC#でUIを記述したいという衝動は、実際には、XAMLの快適さの表れにすぎません。

私にとっては、コードビハインドをできるだけ少なく書くことが個人的な目標です。簡単に言うと、コードビハインドは単体テストが困難ですが、テストされないロジックを含めることができます(通常は含めることができます)。 XAMLは(HTMLのように)宣言型であり、ロジックが含まれていないため、単体テストするものはありません。私はビューコードをXAMLで保持し、ビューロジックをテストが非常に簡単なViewModel(MVVM)で保持しています。

XAMLに慣れると、手続き型コードでのビューの構築よりもそのメリットを実感できるようになります... MVVMのようなパターンを使用すると、さらに一歩進んで、コードビハインドがまれなケースでのみ役立つことがわかります。

5
Brian Genisio

XAML、MXML、これらすべてのものは、平均的な複雑さを持つ単純なUIを開発している限り機能します。 UIが複雑でリッチになると、自動データバインディングは、その利点よりも多くの問題を引き起こします。 XAMLの目的はプログラミングを簡単にすることではなく、UIをロジックから分離して、UIのツールを簡単にできるようにすることです。

データバインディングなし、イベントハンドラなし.. XAMLが二度と表示されず、コードを記述することはないと想定しています。

XAMLはプレゼンテーションです。データバインディングはプレゼンテーションではありません。そのプレゼンテーションロジック。すべてのプレゼンテーションロジックをコードビハインドに配置します(データバインディングとハンドラー)。開発者は背後でコードを所有し、設計者はXAMLを所有します。開発者でXAMLに触れている場合は、その部分をコードビハインドに移動します。

xAMLがなくてもWPFアプリを作成できます。

Vinoth Kumar Rに感謝します(Flex MXMLデータバインディングを使用して十分にやり通していた)

4
vinoth

XAMLの優れた点の1つは、プレゼンテーションとロジックの分離です。この分離は理論的なものだけでなく、実際的なものでもあります。私の場合、私のUIのほとんどはデザイナーによって処理されています。このデザイナーはブレンドを使用し、C#を知らない、C#を学ぶことに興味がない、そして率直に言う必要はないはずです。このデザイナーは真のデザイナーであり、アーティストであり、これらのツールを使用して物事を本当に本当に見栄えよくする方法を知っています。基本的に私のフィロシピーはこれであり、XAMLを使用すればするほど、UIを実行できるため、UIで実行する必要がある作業が少なくなります。これは私たちにとってはうまくいきました。私は通常、見た目が悪くなるようにコントロールを設計し、基本的な飾り気のない外観を与え、DataContextを使用してオブジェクトをバインドします(DataTriggersはコードを削減するための優れた方法です)。その結果、コードをチェックインし、翌日に戻ってそれを同期することがよくあります。UIはまったく異なって見えますが、すべてが機能します!!!

もちろん、それが実現するまでには少なくとも1年半かかりましたが、今ではこのモデルは機能しているようで、UIの外観はKick A ##です。アプリケーションは高い評価を得ており、UI自体にはほとんど取り組みません。涼しいもの。長い話を簡単に言うと、背後にあるコードは開発者中心である可能性があり、WPFを使用して利益を生み、利益を生み、生計を立てる他のグループ全体、つまりデザイナーを忘れていると思います。

もちろん、開発者がXAML/WPFを歌ったり踊ったりするのにまだ時間がかかる場合があり、設計者に正しい方法を教える必要がある場合もありますが、投資によって何回も報われる価値があると思います大規模なプロジェクト(たぶんそうではないかもしれませんone0

4
jm Ducasse

留意すべき最も重要なことは、XAMLはプレゼンテーション用であることです。プレゼンテーションはすべてXAMLに含める必要があります。ロジックがある場合は、それをXAMLから除外します(C#内)。

XAMLファイルを完全に異なるものにスワップアウトすることを想像してみてください。ただし、同じデータを使用します-分割が必要な場所です。

4
Fenton

それはあなただけではなく、あなたのチームについてもです。

3
Kent Boogaart

XAMLとC#は、既に説明したようにロジックを設計から分離するための本当に良い方法です。

典型的なプログラマーにとって、プログラミングの方法はWPFを使用することによって実際に変更されます。プログラマーがC++、VB、WinForms、ATLおよびMFCのバックグラウンドから来ていると仮定すると、UIのバックグラウンドは、XAMLのようにロジックから自然に分離されていませんでした。およびC#。

このプログラミング方法に慣れるには少し時間がかかりますが、ますます経験を積むことは本当に効果的です。

始める前に、MVVMパターンを学習し、チュートリアルを実行してパターンの強さを理解し、その利点を理解することは本当に良いことです。

MVVMパターンの利点に基づくWPFおよびC#アプリケーション:

1。ユーザーエクスペリエンスと使いやすさロジックをUIから分離することで、専用のデザイナーがUIデザインとアニメーションに取り組むのがより自然になります。このようにして、UIはデザインを知っている誰かによって設計されている間、プログラマーは背後のロジックと技術的なソリューションに集中できます。これは多くのソフトウェア会社にとって問題であり、少なくとも業界ではプログラマーがUIを設計しているだけであり、多くのサポート、保守、および効率的なアプリケーションを生み出していることが問題となっています。

技術的な解決策ではなく使用法に焦点を当てたユーザビリティの背景を持つ人がいることで、よりユーザーフレンドリーなアプリケーションになる可能性が高くなります。 Joel Spolskyによる、そのような例を除いた非常に興味深い本「プログラマーのためのユーザーインターフェイスデザイン」があります。

XAMLアプリケーションにMVVMパターンを使用することで、より多くのユーザーがアプリケーションを表示する可能性が高くなります。

2。 Maintanenceメンテナンス。これは、ソフトウェア開発の中で非常にコストがかかります。 MVVMパターンは最初は大きなオーバーヘッドであると感じるかもしれませんが、関数が追加され、アプリケーションがより複雑で高度になるにつれて、アプリケーションはより有益になります。このようなアプリケーションを保守するのは本当に簡単であることがわかります。概要については、このビデオをご覧ください。

3。コンピテンスの混合より良い結果を達成するためにチームで作業する専用のデザイナーと専任のプログラマーは、コンピテンスを混合する非常に良い方法です。組織はプログラマを雇うだけでなく、能力を組み合わせて最高の結果を提供する必要があります。

4。設計に関心のあるプログラマーのための機会最後に、Windows環境に豪華なアプリケーションを実装することが可能です。 Microsoft Expression Blendは、デザインに興味のあるプログラマである場合、素晴らしいデザインを備えた便利で便利なアプリケーションを学び、実現する可能性を広げます。

ただし、XAMLとC#、MVVMを使用するかどうかにかかわらず、リスクが生じる可能性があります。また、XAMLが提供する大きな可能性と柔軟性も欠点となる可能性があります。プログラマーがこの新しい簡単なUI環境で自由になると、アプリケーションは、アニメーション、色、この新しい環境が提供するすべてのものの幅広いスペクトルになる可能性があります。 C++およびATL環境でUIコントロールを追加した方法を思い出してください。

それでもメリットはもっとあります。UIにC#ではなくXAMLを使用するためのインスピレーションを得られれば幸いです。それに慣れたら、きっと気に入っていただけると思います。

良いチュートリアルへのリンク: Tutorial MVVM XAML C#

2
Sun

重要なポイントについてはまだ回答がないようです: https://msdn.Microsoft.com/en-us/library/windows/apps/xaml/hh465340.aspx

XAMLは単なる手続き型のコードです(簡単なだけです)。

<Grid x:Name="ContentPanel" Margin="12,0,12,0">
    <Button Height="72" Width="160" Content="Click Me" />
</Grid>

"このXAMLをC#またはVisual Basicで記述されたコードで部分的に置き換える方法を以下に示します。"

// Initialize the button
Button myButton = new Button();
// Set its properties
myButton.Width = 160;
myButton.Height = 72;
myButton.Content = "Click Me";
// Attach it to the visual tree, specifically as a child of
// a Grid object (named 'ContentPanel') that already exists. In other words, position
// the button in the UI.
ContentPanel.Children.Add(myButton);

たとえば、Windowsフォームで作業した場合、Windowsフォームデザイナが上記のリンクの例と同様のコードを含む.designer.csファイルを生成したことを覚えているでしょう。この種の宣言型コードは、C#よりもXAMLでより適切に表現されます。

おもちゃ以外のアプリケーションでは、常にUIを定義してMVVMの方法でロジックに接続するためにXAMLを優先する必要があります。

1
Eduardo Wada

私はもともと開発のWeb側から来て、現在WPF/Silverlightを学んでいます。私にとって、XAMLモデルは、WinFormsがこれまでよりもはるかに理にかなっています。 XAMLをHTMLと.csファイルのようにコードビハインドのように扱います。

1
Rob Allen

コンピュータプログラミングで使用するプログラミング言語に関係なく、すべてのロジックはコードである必要があります。 XAMLは、ControlTemplateでもそれを置き換えるべきではありませんが、ニースですが、ユニットテストとコードのデバッグがはるかに簡単です。

1
Robert

私はクリーンなコードが大好きです。コードが少ないほど、クリーンになります。コードは何百万もの方法で記述でき、XAMLはより制限的です。 XAMLは、もちろん適切な場合、コードの削減に優れています。 XAMLに何かを入れることができる場合は、それを行います。ツールはXAMLを読み取り、XAMLで何かを行うことができます。コードを使用すると、はるかに少なくなります。 XAMLを処理するツールとフレームワークは進化し、より良くなり、既存のXAMLでより多くの作業を行うようになります。コードについてそれを言うことはできません。 XAMLが進化するほど、アプリケーションを宣言的に定義できるようになります。

私にとって、XAMLの使用はLINQの使用に似ています。読みやすい1行のステートメントを記述し、必要なものを実装するための最良の方法をフレームワークに決定させることができれば、良いと思います。私はできる限り、自分がやりたいことをハードコーディングする代わりに、欲しいものの宣言を使用するように心がけています。 F#は、このパラダイムのもう1つの良い例です。

1
devMomentum

Xaml2009ではもっと多くのことができるようになることを明言しないでください。これは、コードビハインドで行う必要があります。

残念ながら、BAMLは2010年の時間枠に対してxaml 2009を完全にはサポートしないため、2010年の時間枠でxamlをコンパイルすることはできません。そして、完全な開発設計ループを実行するには、blendの新しいバージョンを待つ必要があります。 (3以降)

ダグラス

0
DouglasH

XAMLは、構造と設計に使用されるXHTMLとCSSまたはXMLとXSLの組み合わせに似ていると見なすことができます。ロジックの形式はすべてC#にする必要があります。 このようにして、構造とデザインがロジックから分離されます。このアプローチを使用することにより、コードもクリーンになります。もう1つの良い点は、デザイナーとプログラマーの間でタスクを簡単に分離できることです。

もう1つ...これは、MSDNのXAMLの定義です。

Extensible Application Markup Language(XAML)は、宣言型アプリケーションプログラミング用のマークアップ言語です。 Windows Presentation Foundation(WPF)は、Extensible Application Markup Language(XAML)ローダーを実装し、Extensible Application MarkupでアプリケーションUIの大部分を作成できるように、Windows Presentation Foundation(WPF)タイプにExtensible Application Markup Language(XAML)言語サポートを提供します。言語(XAML)マークアップ。さらに、SDKにはXAMLPadと呼ばれるXAML(Extensible Application Markup Language)編集ツールが含まれています。このツールを使用して、リアルタイムでExtensible Application Markup Language(XAML)を試すことができます。

引用へのリンク。

0
Partial

コードで保守またはデバッグする方が簡単なものもあります。

0
Eric Schneider

流暢なスタイルでWPFをC#でプログラミングすると、コードのサイズと複雑さを抑えることができます。 WPFで流暢なスタイルを使用する例については、 この回答 を参照してください。

0
dharmatech