【问题标题】:Binding to a different dataContexts绑定到不同的 dataContexts
【发布时间】:2011-11-06 19:28:16
【问题描述】:

Windows Phone 应用程序(Silverlight 3)

我有一个文本块

<TextBlock Text="{Binding Key}"  FontSize="40" Foreground="{Binding propertyOnAMainViewModel}" />

TextBlock 的 DataContext 被设置为一个类 Group 实例,它暴露了 Key 属性。

我需要将 TextBlock 的前景属性绑定到动态(可通过代码设置)属性,但要绑定到不同的 ViewModel,而不是 Group。

是否可以将一个元素上的不同属性绑定到不同的数据上下文?

【问题讨论】:

    标签: data-binding windows-phone-7 mvvm


    【解决方案1】:

    你可以这样做,但它不是非常优雅!每个绑定都有一个 Source,如果没有指定,它就是控件的DataContext。如果在代码隐藏中构造绑定,则可以显式设置源。在 XAML 中,您唯一的选项是默认值(即 DataContext)或 ElementName 绑定。

    我要做的是创建一个 ViewModel,它公开您希望绑定到的两个属性,并将其用作您的 DataContext

    【讨论】:

      【解决方案2】:

      如果您可以在另一个虚拟机中托管一个虚拟机,那是最简单的:

      public class TextBoxViewModel : ViewModelBase
      {
        private ChildViewModel _childVM;
      
        public ChildViewModel ChildVM
        {
          get { return _childVM; }
          set
          {
            if (_childVM == value)
              return;
      
            if (_childVM != null)
              _childVM.PropertyChanged -= OnChildChanged;
      
            _childVM = value;
      
            if (_childVM != null)
              _childVM.PropertyChanged += OnChildChanged;
      
            OnPropertyChanged("ChildVM");
          }
        }
      
        public Brush TextBoxBackground
        {
          get
          {
            if(ChildVM == null)
              return null;
      
            return ChildVM.MyBackground;
          }
          set
          {
            if (ChildVM != null)
              ChildVM.MyBackground = value;
          }
        }
      
        private void OnChildChanged(object sender, PropertyChangedEventArgs e)
        {
          if (string.IsNullOrEmpty(e.PropertyName) || e.PropertyName == "MyBackground")
            OnPropertyChanged("TextBoxBackground");
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 2015-09-22
        • 2013-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多