WPF:绑定到转换对象失败!

问题描述:

也许标题不完全确切,因为我不确定如何描述它。WPF:绑定到转换对象失败!

我有一个名为NSLTextBlock的用户控件,下面是NSLTextBlock的定义:

public partial class NSLTextBlock: UserControl 
{ 
    public override void OnApplyTemplate() 

    { 
    base.OnApplyTemplate(); 
    } 
    public object HighlightMatchCase 
    { 
    get { return GetValue(HighlightMatchCaseProperty); } 
    set 
    { 
    SetValue(HighlightMatchCaseProperty, value); 
    } 
    } 
    public static readonly DependencyProperty HighlightMatchCaseProperty = 
    DependencyProperty.Register(
    "HighlightMatchCase", 
    typeof(object), 
    typeof(NSLTextBlock), 
    new PropertyMetadata(null, new PropertyChangedCallback(HighlightChangedCallback))); 

    public NSLTextBlock() 
    { 
    InitializeComponent(); 
    } 
} 
} 

而且HighlightMatchCase是依赖属性。

主机观点是这样的:

<ListView Name ="LogDataList" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding LogDataCollection}" Background="Cyan"> 
     <ListView.View> 
      <GridView AllowsColumnReorder="true" 
       ColumnHeaderToolTip="Event Log Information"> 
       <GridViewColumn Header="Event Log Name" Width="100"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <l:NSLTextBlock Height="25" DataContext="{Binding LogName, Converter={StaticResource DataFieldConverter}}" HighlightMatchCase="{Binding Element}" Loaded="EditBox_Loaded"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Header="Creator" Width="100"> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <l:NSLTextBlock Height="25" DataContext="{Binding CreatorName, Converter={StaticResource DataFieldConverter}}" HighlightMatchCase="{Binding Element}" Loaded="EditBox_Loaded"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Header="Message" Width="100" > 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <l:NSLTextBlock Height="25" DataContext="{Binding Message, Converter={StaticResource DataFieldConverter}}" HighlightMatchCase="{Binding Element}" Loaded="EditBox_Loaded"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
      </GridView> 
     </ListView.View> 
    </ListView> 

数据字段:

public class DataField : INotifyPropertyChanged 
    { 
    private HighlightElement element; 
    public HighlightElement Element 
    { 
     get 
     { return element; } 
     set 
     { 
     element = value; 
     OnPropertyChanged("Element"); 
     } 
     } 
    } 

其实,我想字符串(如日志名称,CreatorName和消息),以数据字段,并结合我自己转换 - 定义的属性(HighlightMatchCase)至元素(转换的数据上下文)。当我将它绑定到Element时,它抛出BindingExpressionException,无法在对象上找到属性'Element'。

我该如何解决?你有什么建议?

我真的很感激。在线上。

+0

尝试http://bea.stollnitz.com/blog/?p=52,看看你能否得到更详细的错误? – JustABill 2010-05-26 15:09:40

出于某种原因,NSLTextBlock的数据上下文未设置为DataField的实例。为OnDataContextChanged添加事件处理程序并使用调试器检查发生了什么。也许这是你的DataFieldConverter失败。

+0

我用诊断功能调试了datacontext,真的为我工作。 我非常重视BindingExpression异常!其实它工作正常!Wallstreet程序员,JustABill,非常感谢你节省了我的夜晚时间。 – user472843 2010-05-27 03:15:26