我有一个自定义项的ListBox(" EditableTextBlock",一个普通的TextBlock,在点击后,变成一个TextBox,然后在编辑后返回一个TextBlock。) 我想发送一个事件,或者向父母发起一个回调,告知某个成功的编辑;
在EditableTextBlock中,我可以使用像
这样的方法if (e.Key == Key.Enter)
{
this.IsInEditMode = false;
AcceptRenaming(sender, e);
}
我可以使用AcceptRenaming()
以某种方式发送信息,但是
我发现,作为DataTemplate的项目,我不能直接使用EventHandler(从父类调用类似的东西)
EditTextBlock.RenameEvent += new EventHandler(OnRenameAccepted);
)
我尝试按照How do you add an Event Trigger to a data template for a business object?上的提示创建RoutedEvent,但我无法理解如何向EventRegistry注册我自己创建的自定义事件。
我在这里失踪了什么?或者我的方法是完全错误的,还有其他我可以/应该做的事情吗?
提前致谢
使用EditableTextBlock的ListBox:
<ListBox x:Name="lbConfigurationList"
DataContext="{Binding DataContext, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
ItemsSource="{Binding ConfListVM.ObservableConfList}"
<ListBox.ItemTemplate>
<DataTemplate>
<local:EditableTextBlock Text="{Binding ConfName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
EditableTextBlock xaml:
<UserControl.Resources>
<DataTemplate x:Key="EditModeTemplate">
<TextBox KeyDown="TextBox_KeyDown" Loaded="TextBox_Loaded" LostFocus="TextBox_LostFocus"
Text="{Binding ElementName=EditableText, Path=Text, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
<DataTemplate x:Key="DisplayModeTemplate">
<TextBlock Text="{Binding ElementName=EditableText, Path=Text}" >
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="Rename" Click="RenameContext_Click"/>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</DataTemplate>
<Style TargetType="{x:Type local:EditableTextBlock}">
<Style.Triggers>
<Trigger Property="IsInEditMode" Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource EditModeTemplate}" />
</Trigger>
<Trigger Property="IsInEditMode" Value="False">
<Setter Property="ContentTemplate" Value="{StaticResource DisplayModeTemplate}" />
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>