我在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()对其进行验证)。但这实际上表明它找不到有问题的元素。