Привязка данных из DataContext PhoneApplicationPage к UserControl на той же странице - PullRequest
1 голос
/ 19 ноября 2011

Это сводит меня с ума, так как это должно быть так просто, хотя я не могу найти ответ после нескольких часов поисков в Google и вспашки через форумы, блоги и учебные пособия.

У меня есть UserControl на странице (имя класса: CheckListItemControl) и я установил для DataContext страницы значение "this" (для себя). Я дал этому UserControl свойства, такие как:

private string title;
public string Title{
   get{ return title; }
   set{ title = value; }
}

Теперь на этой странице я хочу привязать значение свойства «ApplicationName» страницы к свойству Title этого UserControl, например:

<src:CheckListItemControl x:Name="someControl" Title="{Binding ApplicationName}"/>

Это не работает. я могу установить нормальный текст как это:

Title="Very cool wp7 app"  

но не так:

Title="{Binding ApplicationName}"

Запуск приложения вызывает исключение.

Я полагаю, что это как-то связано с областью действия DataContext, но я не знаю почему или что. UserControl - это просто элемент управления, и если другие «нормальные» элементы управления на странице могут связываться с DataContext, почему UserControl не может ???

Помощь с удовольствием оценят, это сводит меня с ума.

1 Ответ

1 голос
/ 19 ноября 2011

Я думаю, что здесь есть две проблемы.

Во-первых, чтобы сделать заголовок привязываемым, он должен быть свойством зависимости.

Во-вторых, если в вашем пользовательском контроле есть

DataContext = this;

, вы, вероятно, хотите удалитьЭто.Поскольку DataContext будет автоматически передаваться из родительского элемента управления в ваш пользовательский элемент управления.Это только разорвет цепь.

Небольшой пример

// How you define a Title dependency property
public string Title
{ 
    get { return (string)GetValue(TitleProperty); } 
    set { SetValue(TitleProperty, value); } 
} 

public static readonly DependencyProperty TitleProperty = 
            DependencyProperty.Register("Title", typeof(string), typeof(CheckListItemControl), new PropertyMetadata("default title")); 

// How you bind the Title dp of the usercontrol to a TextBlock thru ElementName binding
<UserControl x:Name="MyCheckListItemControl" ... 
  // I assume you are using a TextBlock to display the Title
  <TextBlock Text="{Binding Title, ElementName=MyCheckListItemControl}" ... 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...