我正在创建一个WPF应用程序,在页面顶部我需要显示一个邮政地址。邮政地址下方将是产品信息。产品信息从数据源返回并绑定到datacontext。例如this.DataContext = myComplexType;
员工需要手动切换要显示的邮政地址。我认为最好的方法是通过单选按钮控制来选择。换句话说,在我的页面上,我将有3个单选按钮,*英国地址*美国地址*中国地址,根据选择的内容,相应的文本将输入到文本块顶部的文本块名称=“txbPostalAddress”中。页。
邮政地址位于名为地址(作为字符串)的类中。 例如代码:
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,任何想法如何或链接到教程等?
由于
戴夫
答案 0 :(得分:3)
如果你的问题是在哪里设置DataContext,它只是有时依赖,否则无关紧要。
通常,ViewModel(简而言之是一个包含数据和命令的类)设置为DataContext。
可以通过以下方式完成
In XAML - >在XAML中为ViewModel创建静态资源,并使用StaticResoure进行设置。 问题 - > View必须知道ViewModel,ViewModel必须具有无参数构造函数
在ViewModel中 - >将视图传递给View Model的构造函数,并在ViewModel ctor中设置view.DataContext = this 问题 - > ViewModel必须了解View
Attach outside View and ViewModel,这通常在自定义引导类中完成(或通过覆盖App-> OnStartUp。这里View是instanciated,ViewModel是instanciated,View.DataContext设置为ViewModel 问题 - >需要自定义初始化
ViewModelLocator - >在XAML中创建ViewModelLocator实例作为StaticResource,将DataContext绑定到ViewModelLocator的Property 优势 - >视图,viewmodel保持松散耦合。
答案 1 :(得分:0)
如果你计划使用MVVM,那么XAML是最好的选择,你可以在后面的代码中做到这一点
答案 2 :(得分:0)
您可以使用任意数量的数据上下文,只要它位于不同的控件中即可。例如。您可以使用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>