尝试使用 MultiValueConverter 从 DataGridTemplateColumn 访问用户控件的 DataContext;女士。每次返回内部命名对象



我在WPF, . net 3.5框架下工作。

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

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

我试图传递当前行的'Id'属性以及用户控件的DataContext的'Id'来比较它们。

我已经命名了我的用户控件(x:Name="myRoot")。下面是绑定的示例。记住,这些都位于"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 . namdobject的值。如果我尝试直接绑定到DataContext (Path="DataContext" ElementName="myRoot")或甚至只是尝试绑定到用户控件本身的公共属性(Path="MyProperty" ElementName="myRoot"),这并不重要,值总是ms . internal . namdobject。

这是数据网格的问题吗?MultiValueConverter中的错误?还是我做错了什么?

任何帮助都将非常感激!

谢谢,戴夫

如果您的图像在DataTemplate中,那么这是一个不同的名称作用域,而不是它之外的所有内容。因此,你不能从DataTemplate中通过名称绑定到DataTemplate之外的元素。

你必须使用像RelativeSource这样的东西,或者将你需要的信息传递到DataTemplate(通过it's DataContext)。

你正在获取的NamedObject可能是BindingExpression。NullDataItem(可以调用ToString()对其进行验证)。但这实际上表明它找不到有问题的元素。

最新更新