Привязка к другому dataContexts - PullRequest
1 голос
/ 30 августа 2011

Приложение для Windows Phone (Silverlight 3)

У меня есть текстовый блок

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

DataContext для TextBlock установлен на экземпляр класса Class, который предоставляет свойство Key.

Мне нужно привязать свойство переднего плана TextBlock к динамическому (устанавливаемому из кода) свойству, но в другом ViewModel, а не в группе.

Можно ли привязать разные свойства одного элемента кразные контексты данных?

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

Вы можете сделать это ,, но это не очень элегантно! каждая привязка имеет источник, который, если не указан, является элементом управления DataContext. Вы можете установить источник явно, если вы создаете привязку в коде позади. В XAML вашими единственными опциями являются значения по умолчанию (например, DataContext) или ElementName привязок.

То, что я хотел бы сделать, - это создать ViewModel, который предоставляет оба свойства, которые вы хотите привязать, и использовать их в качестве DataContext.

0 голосов
/ 30 августа 2011

Проще всего разместить одну виртуальную машину внутри другой:

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");
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...