datatemplate

时间:2015-09-11 12:07:49

标签: c# wpf events

我有一个自定义项的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>

0 个答案:

没有答案
相关问题