簡體   English   中英

通過XAML或代碼綁定

[英]Binding via XAML or Code behind

我正在創建一個WPF應用程序,在頁面頂部我需要顯示一個郵政地址。 郵政地址下方將是產品信息。 產品信息從數據源返回並綁定到datacontext。 例如this.DataContext = myComplexType;

員工需要手動切換要顯示的郵政地址。 我認為最好的方法是通過單選按鈕控制來選擇。 換句話說,在我的頁面上,我將有3個單選按鈕,*英國地址*美國地址*中國地址,根據選擇的內容,相應的文本將輸入到文本塊頂部的文本塊名稱=“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,任何想法如何或鏈接到教程等?

謝謝

戴夫

如果你的問題是在哪里設置DataContext,它只是有時依賴,否則無關緊要。

通常,ViewModel(簡而言之是具有數據和命令的類)設置為DataContext。

它可以通過以下方式完成

  1. 在XAML中 - > 在XAML中為ViewModel創建靜態資源,並使用StaticResoure進行設置。 問題 - > View必須知道ViewModel,ViewModel必須具有無參數構造函數

  2. 在ViewModel中 - >將視圖傳遞給View Model的構造函數,並在ViewModel中設置view.DataContext = this ctor Issue - > ViewModel必須知道View

  3. 附加在View和ViewModel之外 ,這通常在自定義引導類中完成(或通過覆蓋App-> OnStartUp。這里View是instanciated,ViewModel是instanciated,View.DataContext設置為ViewModel Issue - >需要自定義初始化

  4. ViewModelLocator - >在XAML中創建ViewModelLocator實例作為StaticResource,將DataContext綁定到ViewModelLocator的屬性 - > view,viewmodel保持松散耦合。

如果您計划使用MVVM,那么XAML是最好的選擇,否則您也可以在代碼后面執行此操作

您可以使用任意數量的數據上下文,只要它位於不同的控件中即可。 例如,您可以使用Address UserControl來處理格式化,ViewModel上的Addresses屬性包含可用地址列表,還有一個CurrentAddress屬性,它將所選地址保存在Addresses列表之外。 如果地址有多行,您可能希望將Address作為對象而不僅僅是字符串。

你的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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM