繁体   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