首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过XAML或Code XAML进行绑定

通过XAML或Code XAML进行绑定
EN

Stack Overflow用户
提问于 2012-05-10 21:54:41
回答 3查看 1.9K关注 0票数 2

我正在创建一个WPF应用程序,并且需要在页面的顶部显示一个邮寄地址。下面的邮寄地址将是产品信息。产品信息从数据源返回并绑定到datacontext。例如this.DataContext = myComplexType;

员工需要手动切换要显示的邮寄地址。我认为最好的方法是通过单选按钮控件进行选择。换句话说,在我的页面上,我将有3个单选按钮,*英国地址*美国地址*中国地址,并根据选择的内容,在页面顶部的文本块Name="txbPostalAddress“中输入适当的文本。

邮寄地址位于一个名为addresses的类中(作为字符串)。例如,代码:

代码语言:javascript
复制
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,是否知道如何使用或链接到教程等?

谢谢

戴夫

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-10 22:05:37

如果您的问题是在哪里设置DataContext,只是有时会有所不同,否则无关紧要。

通常将ViewModel (简而言之,包含数据和命令的类)设置为DataContext。

它可以通过以下方式完成

  1. In XAML ->在XAML中为ViewModel创建静态资源,并使用StaticResoure进行设置。问题->视图必须知道ViewModel,ViewModel必须具有无参数构造函数
  2. in ViewModel ->将视图传递给视图模型的构造函数,并在ViewModel ctor中设置view.DataContext=this Issue -> ViewModel必须知道have这通常是在自定义引导类中完成的(或者通过重写应用程序-> OnStartUp。这里实例化了视图,实例化了viewmodel,将View.DataContext设置为ViewModel Issue ->自定义初始化is XAML -> create ViewModelLocator instance in XAML as StaticResource,将DataContext绑定到ViewModelLocator Advantage ->视图的属性,视图模型保持松散耦合。
票数 3
EN

Stack Overflow用户

发布于 2012-05-10 22:04:57

如果您计划使用MVVM,那么XAML是最佳选择,否则您也可以在后台代码中完成这项工作

票数 0
EN

Stack Overflow用户

发布于 2012-05-11 02:05:44

您可以使用任意数量的数据上下文,只要它位于不同的控件中即可。例如,您可以有一个负责格式化的Address UserControl,一个保存可用地址列表的ViewModel上的addresses属性,以及一个保存Addresses列表中所选地址的CurrentAddress属性。如果地址有几行,您可能希望将地址设置为对象,而不仅仅是字符串。

您的XAML可能如下所示:

代码语言:javascript
复制
<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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10535502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档