Попытка получить доступ к DataContext пользовательского элемента управления из DataGridTemplateColumn, используя MultiValueConverter;MS.Internal.NamedObject возвращается каждый раз - PullRequest
2 голосов
/ 20 апреля 2011

Я работаю в WPF, .NET 3.5 Framework.

У меня есть TabItem с DataContext из 'Request', пользовательский объект.У 'Request' есть свойство с именем 'Id'.

Содержимое TabItem является пользовательским элементом управления (который наследует DataContext, нет?), Который содержит DataGrid.DataGrid отображает коллекцию объектов «Request», один из которых является тем же экземпляром «Request», который является DataContext пользовательского элемента управления.

Я пытаюсь передать свойство «Id» текущей строкиа также 'Id' DataContext пользовательского элемента управления для их сравнения.

Я назвал свой пользовательский элемент управления (x: Name = "myRoot").Вот XAML связывания.Помните, что все это находится внутри «DataGridTemplateColumn»:

<Image x:Name="imgOpen" Source="open.ico" Width="10" Height="10">
   <Image.Visibility>
      <MultiBinding Converter="{StaticResource IsLinkedRequest}">
         <Binding Path="Id" />
         <Binding Path="DataContext.Id" ElementName="myRoot" />
      </MultiBinding>
   </Image.Visibility>
</Image>

Вот конвертер:

Dim datagridRecordId As Integer = CInt(values(0))
Dim currentReqId As Integer = CInt(values(1))

If currentReqId <> datagridRecordId Then
    Return Visibility.Visible
Else
    Return Visibility.Hidden
End If

Моя проблема заключается в том, что привязка DataContext.Id (значения (1) впреобразователь) всегда имеет значение MS.Internal.NamedObject.Не имеет значения, пытаюсь ли я связать напрямую с DataContext (Path = "DataContext" ElementName = "myRoot") или даже просто пытаюсь связать с открытым свойством (Path = "MyProperty" ElementName = "myRoot")Сам пользовательский элемент управления, значение ВСЕГДА MS.Internal.NamedObject.

Это проблема с DataGrid?Ошибка в MultiValueConverter?Или я здесь что-то не так делаю?

Любая помощь здесь будет с благодарностью!

Спасибо,

Дейв

1 Ответ

0 голосов
/ 20 апреля 2011

Если ваше изображение находится в шаблоне данных, тогда это область имен , отличная от всего, что находится за его пределами. Таким образом, вы не можете привязать элемент вне DataTemplate по имени из DataTemplate.

Вы должны будете использовать что-то вроде RelativeSource или передать необходимую информацию в DataTemplate (через его DataContext).

NamedObject, который вы получаете, вероятно, является BindingExpression.NullDataItem (вы можете вызвать ToString () для его проверки). Но это фактически говорит о том, что он не может найти данный элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...