尝试使用MultiValueConverter从DataGridTemplateColumn访问用户控件的DataContext;每次都返回MS.Internal.NamedObject

时间:2011-04-20 13:44:30

标签: wpf datacontext

我正在使用WPF,.NET 3.5 Framework。

我有一个TabItem,其DataContext为'Request',一个自定义对象。 “请求”有一个名为“Id”的属性。

TabItem的内容是一个包含DataGrid的用户控件(它继承了DataContext,没有?)。 DataGrid显示一组'Request'对象,其中一个对象是与用户控件的DataContext相同的'Request'实例。

我正在尝试传递当前行的“Id”属性以及用户控件的DataContext的“Id”来比较它们。

我已将我的用户控件命名为(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绑定(转换器中的values(1))的值始终为MS.Internal.NamedObject。如果我尝试直接绑定到DataContext(Path =“DataContext”ElementName =“myRoot”)或者甚至只是尝试绑定到公共属性(Path =“MyProperty”ElementName =“myRoot”)并不重要用户控件本身,值是ALWAYS MS.Internal.NamedObject。

这是DataGrid的问题吗? MultiValueConverter中的错误?或者我在这里做错了什么?

非常感谢任何帮助!

谢谢,

戴夫

1 个答案:

答案 0 :(得分:0)

如果您的图像位于DataTemplate中,那么它与其他所有内容不同name scope。因此,您无法在DataTemplate中按名称绑定到DataTemplate之外的元素。

您必须使用RelativeSource之类的内容,或者将您需要的信息传递到DataTemplate(通过它的DataContext)。

您获得的NamedObject可能是BindingExpression.NullDataItem(您可以在其上调用ToString()来验证)。但这有效地说它无法找到有问题的元素。