2

私は WPF アプリケーションを作成しており、ページの上部に住所を表示する必要があります。住所の下に製品情報が表示されます。製品情報はデータソースから返され、データコンテキストにバインドされます。例 this.DataContext = myComplexType;

表示する住所をスタッフが手動で切り替える必要があります。選択する最良の方法は、ラジオボタンコントロールを使用することだと思います。言い換えると、私のページには 3 つのラジオ ボタン、*UK Address *USA Address *China Address があり、どれが選択されたかに応じて、適切なテキストが Textblock Name="txbPostalAddress" の上部に入力されます。ページ。

住所は、Addresses というクラス内に (文字列として) 存在します。例: コード:

namespace DAL
{
    public class Addresses
    {
        public string GctHkAddress { get { return gctHkAddress;} }
        public string GctUsaAddress { get { return gctUsaAddress; } }
        public string GctUkAddress { get{return gctUkAddress;} }

        private string gctHkAddress = "Company Name\n Hong Kong \n";
        private string gctUsaAddress = "Company Name\n USA \n";
        private string gctUkAddress = "Company Name\n UK \n";
    }
}

私の質問は、バインディングを XAML またはコード ビハインドで行うべきかということです。コード ビハインドで非常に簡単に実行できますが、これは XAML の力を無効にしているように感じます。どちらがより良いアプローチであるか、またXAML経由の場合、チュートリアルなどへのリンクや方法について何か考えはありますか?

ありがとう

デイブ

4

3 に答える 3

3

あなたの質問が DataContext をどこに設定するかである場合、それは時々依存しますが、それ以外は問題ではありません。

通常、ViewModel (要するに、データとコマンドを持つクラス) は DataContext に設定されます。

それは次の方法で行うことができます

  1. XAMLの場合 -> XAML で ViewModel 用の staticresource を作成し、StaticResoure を使用して設定します。問題 -> View は ViewModel について認識している必要があり、ViewModel にはパラメーターのないコンストラクターが必要です

  2. ViewModel で -> View Model のコンストラクターにビューを渡し、ViewModel ctor Issue で view.DataContext=this を設定します -> ViewModel は View を認識している必要があります

  3. View と ViewModelの外側にアタッチします。これは通常、カスタム ブートストラップ クラスで (または App-> OnStartUp をオーバーライドすることによって) 行われます。ここで View がインスタンス化され、ViewModel がインスタンス化され、View.DataContext が ViewModel に設定されます。

  4. ViewModelLocator -> XAML で ViewModelLocator インスタンスを StaticResource として作成し、DataContext を ViewModelLocator Advantage のプロパティにバインドします -> ビュー、ビューモデルは疎結合のままです。

于 2012-05-10T14:05:37.323 に答える
0

MVVM を使用する予定がある場合は、XAML が最適なオプションです。それ以外の場合は、コード ビハインドでも実行できます。

于 2012-05-10T14:04:56.703 に答える
0

異なるコントロール内にある限り、好きなだけデータ コンテキストを使用できます。たとえば、フォーマットを処理する Address UserControl、使用可能なアドレスのリストを保持する ViewModel の Addresses プロパティ、および Addresses リストから選択されたアドレスを保持する CurrentAddress プロパティを持つことができます。住所に複数の行がある場合は、住所を文字列だけでなくオブジェクトにすることもできます。

XAML は次のようになります。

<Page>
    <!-- Page DataContext would be set in code behind. This would be the main ViewModel -->
    <my:AddressUserControl DataContext="{Binding CurrentAddress}"/>
    <ComboBox ItemsSource="{Binding Addresses}" SelectedItem="{Binding CurrentAddress}" DisplayMemberPath="CompanyName"/>
    <!-- more controls -->
</Page>
于 2012-05-10T18:05:43.923 に答える