【问题标题】:Datatemplate get contents of child controls数据模板获取子控件的内容
【发布时间】:2012-01-23 14:26:17
【问题描述】:

我有一个数据模板

<ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
        <ui:UniformWrapPanel />
    </ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

<ItemsControl.ItemTemplate>
    <DataTemplate>
        <Border  MouseUp="ItemBorder_MouseUp"  Name="ItemBorder" CornerRadius="10" BorderBrush="Black" BorderThickness="1" Margin="3" Background="{Binding Converter={StaticResource RescuerColorConverter}}">
            <StackPanel Orientation="Vertical" Margin="3">
                <TextBlock FontWeight="Bold" FontSize="20" Text="{Binding Path=Identifier}" HorizontalAlignment="Center" />
                <TextBlock FontSize="16" Text="{Binding Converter={StaticResource RescuerNameConverter}}" HorizontalAlignment="Center" />
            </StackPanel>
        </Border>
    </DataTemplate>
</ItemsControl.ItemTemplate>

显示人员及其标识符的列表:

+--------+
|  6969  |
|  Name  |
+--------+

如果我在边框控件上设置 MouseUp,我可以从框中获取事件,但是如何从文本块中获取值?

谢谢。

【问题讨论】:

    标签: wpf xaml data-binding datatemplate


    【解决方案1】:

    事件处理程序有一个“sender”参数,它是事件起源的对象。这将使您获得所需的 Border 实例。那么有两种可能:

    1) 如果您使用数据绑定,Border 的 DataContext 应该是为其创建 DataTemplate 的项目。

    2) 如果您不使用数据绑定,您可以深入到边框的可视化树中并通过这种方式定位 TextBlock。

    就我个人而言,我更喜欢选项 1,但我倾向于两者都不使用,因为我会使用 Caliburn Micro 的操作来连接这种东西,这让我可以将数据上下文作为参数传递给 ViewModel 上的方法。

    【讨论】:

      【解决方案2】:

      DataContext 是保存数据的对象,否则绑定将不起作用,只需转换它并获取所需的内容。

      var data = (MyDataClass)(sender as Border).DataContext;
      // Do stuff with data.Identifier etc.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-01
        • 1970-01-01
        • 2015-05-27
        • 2019-07-16
        • 1970-01-01
        • 2012-02-16
        • 1970-01-01
        相关资源
        最近更新 更多