在wpf中动态加载不同的文本块,并为所有这些块设置上下文菜单

时间:2012-10-11 09:49:13

标签: wpf

我们要求根据从数据库中提取的结果动态加载视图中的文本块。

例如:如果count返回为" 5"

我需要显示5个文本块,我们还需要设置"上下文菜单"在文本块上。

如果用户右键单击上下文菜单,他可以选择加载"更多文本块"通过点击显示其他详细信息。想知道如何实现这一目标的最佳方式。

此致

chaitu


感谢您的邮件, 我们需要在不同文本块的不同上下文菜单上显示不同的数据。上下文菜单有标题,belwo它有"名称" " Phonenumber来

fore.g:   Textblock A , 哪个有contextmenu

ABC

Adam" 123456"

Steve" 56789"

加载更多详情

TextBlock B

DEF

Sachin" 9999"

Rahul" 8976"

加载更多详情

这应该是显示。 当用户点击"加载更多详细信息" , 在currentTextBlocks的右侧,应该显示另一组TextBlock。

此致 chaitu

1 个答案:

答案 0 :(得分:1)

您可以使用绑定到ItemTemplate的Observablecollection。例如:

XAML

<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemTemplate>
    <DataTemplate>
            <TextBlock Text="{Binding}">
                <TextBlock.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="More Detail" Click="LoadMoreDetail" />
                    </ContextMenu>
                </TextBlock.ContextMenu>
            </TextBlock>
    </DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

和codebehind

public ObservableCollection<string> myTextBlocks { get; set; }
private void LoadModel()
{
   myTextBlocks = new ObservableCollection<string>();
   // HERE IMPLEMENTS YOUR DB LOGIC TO LOAD
   myTextBlocks.Add("1");
   myTextBlocks.Add("2");
   myTextBlocks.Add("3");

   this.DataContext = myTextBlocks;
}
private void LoadMoreDetail(object sender, RoutedEventArgs e)
{

   myTextBlocks.Add("more detail");
}