如何正确设置xaml绑定

时间:2014-10-27 15:11:48

标签: c# xaml mvvm binding windows-phone

<TextBlock x:Name="PageTitle" Text="{Binding tripTypeViewModel.test}"/>

这是我在ViewModel测试中绑定到属性的XAML。如何使绑定不指定ViewModel对象'tripTypeViewModel',因为我需要在运行时以编程方式更改数据上下文,所以它不会总是这样吗?

完整情景:

class CompositeViewModel
{
    public static TripsResponseTypeViewModel tripsResponseTypeViewModel { get; set; }
    public static TripTypeViewModel          tripTypeViewModel          { get; set; }

    static CompositeViewModel()
    {
        tripsResponseTypeViewModel = new TripsResponseTypeViewModel();
        tripTypeViewModel          = new TripTypeViewModel();
    }
}

在我的Page.xaml中,我设置了数据上下文:

public MyTripsPage()
{
    this.InitializeComponent();

    this.DataContext = new CompositeViewModel();
}

所以有时我想在tripTypeViewModel集合或其他人上更改ListBoxes的ItemsSource属性。这就是为什么我需要像CompositeViewModel这样的主类,但是如何防止XAML特定的绑定?

1 个答案:

答案 0 :(得分:0)

您可以为所有可能的DataContext创建一个公共界面,并将其绑定到您的PageTitle

    public class CompositeViewModel
    {
        public ITest SelectedViewModel { get; set; }

        // Init the VM's and change them at run time ...
    }

    public class TripsResponseTypeViewModel : ITest
    {
        public string test { get; set; }
    }

    public class TripTypeViewModel : ITest
    {
        public string test { get; set; }
    }

    public interface ITest
    {
        string test { get; set; } 
    }

在xaml

通过这种方式,您可以确保无论DataContext PageTitle使用什么,它都将始终具有test属性,您可以使用XAML绑定该属性