Datacontext потерян с динамическим xaml в WPF - PullRequest
0 голосов
/ 07 декабря 2010

У меня есть окно с простым элементом кадра (назовем его «myFrame»). Внутри Window.Loaded я анализирую строковую переменную (загруженную из внешнего источника) с помощью XamlReader.Parse (string), и в результате получается объект Page (локальная переменная называется «myPage»). Я устанавливаю myFrame.Content = myPage.

Внутри страницы есть ярлык, например:

<label Name="DataBindingTestLabel" Content="{Binding Path=TestLabel, TargetNullValue='Null value'}" />

Я пытаюсь предоставить анонимный тип (для простого тестирования) как текстовый фрейм фрейма, например:

this.ContentFrame.DataContext = new { TestLabel = "Hello, world." };

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

После включения трассировки привязки данных в окне вывода в Visual Studio отображается:

Сведения о System.Windows.Data: 41: Ошибка пути BindingExpression: свойство 'TestLabel' не найдено для 'объекта', поскольку элемент данных имеет значение null. Это может произойти, потому что поставщик данных еще не произвел никаких данных. BindingExpression: Path = TestLabel; DataItem = NULL; целевым элементом является 'Label' (Name = 'DataBindingTestLabel'); Целевым свойством является «Содержимое» (тип «Объект»)

Любое понимание того, что я делаю неправильно, очень ценится.

Ответы [ 2 ]

0 голосов
/ 24 декабря 2010

Как выясняется, у элемента frame есть проблемы, связанные с контекстом данных, в то время как содержимое является элементом страницы.

Решением было использование более общего элемента (ContentControl) и вместо динамического содержимогобыть элементом страницы, мы используем элементы UserControl.В этой настройке текстовый текст не теряется, и привязка работает, как и ожидалось.

0 голосов
/ 07 декабря 2010

Я надеюсь, что кто-то еще может подтвердить это, поскольку я сам недавно использовал только анонимные типы, но статья MSDN об анонимных типах, кажется, указывает, что, как я подозревал, ваш анонимный тип просто выходя за рамки. В разделе «Примечания» на странице, на которую ссылается выше, говорится «у анонимного типа есть область действия метода», поэтому я склонен полагать, что это ваша проблема.

Опять же, я не совсем уверен, просто подумал, что предложу свои мысли по этому вопросу ...

...