![](/img/trans.png)
[英]WPF: there is different between binding via XAML compare to code behind?
[英]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。
它可以通过以下方式完成
在XAML中 - > 在XAML中为ViewModel创建静态资源,并使用StaticResoure进行设置。 问题 - > View必须知道ViewModel,ViewModel必须具有无参数构造函数
在ViewModel中 - >将视图传递给View Model的构造函数,并在ViewModel中设置view.DataContext = this ctor Issue - > ViewModel必须知道View
附加在View和ViewModel之外 ,这通常在自定义引导类中完成(或通过覆盖App-> OnStartUp。这里View是instanciated,ViewModel是instanciated,View.DataContext设置为ViewModel Issue - >需要自定义初始化
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.