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

时间:2010-05-26 11:42:48

标签: wpf data-binding

可能标题不太准确,因为我不确定如何描述它。

我有一个名为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");
       }
      }
    }

实际上,我想将字符串(例如LogName,CreatorName和Message)转换为DataField,并将我自定义的属性( HighlightMatchCase )绑定到元素(转换后的datacontext)。当我将它绑定到Element时,它会抛出BindingExpressionException,无法在对象上找到属性'Element'。

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

我真的很感激。在线上。

1 个答案:

答案 0 :(得分:0)

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