可能标题不太准确,因为我不确定如何描述它。
我有一个名为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'。
我该如何解决?你的建议是什么?
我真的很感激。在线上。
答案 0 :(得分:0)
由于某种原因,NSLTextBlock的数据上下文未设置为DataField的实例。为OnDataContextChanged添加一个事件处理程序,并使用调试器检查发生了什么。也许是你的DataFieldConverter失败了。