【问题标题】:MenuFlyout in a ListView: which element has been clickedListView 中的 MenuFlyout:单击了哪个元素
【发布时间】:2015-09-30 16:04:31
【问题描述】:

我有一个包含 cmets 列表的 ListView:

<ListView ItemsSource="{Binding Comments}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <Border Background="{Binding User, Converter={StaticResource UsernameToBackgroundColorConverter}}"
                    Margin="0,5" 
                    HorizontalAlignment="Stretch"
                    FlyoutBase.AttachedFlyout="{StaticResource FlyoutBase1}"
                    Holding="BorderCommento_Holding">
                    <StackPanel>
                        <Grid Margin="5">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="Auto" />
                            </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding User}"
                                       FontSize="20"
                                       Grid.Column="0"
                                       FontWeight="Bold"
                                       Style="{ThemeResource ListViewItemSubheaderTextBlockStyle}"/>
                        <TextBlock HorizontalAlignment="Right"
                                       Text="{Binding DateTime}"
                                       FontSize="20"
                                       Grid.Column="1"
                                       Style="{ThemeResource ListViewItemSubheaderTextBlockStyle}"/>
                    </Grid>
                    <TextBlock Margin="5,0,5,5"
                                       Text="{Binding Text}"
                                       FontSize="20"
                                       TextWrapping="Wrap"/>
                </StackPanel>
            </Border>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

评论类:

public class Comment
{
    public Comment(String id, String user, String text, String date_time)
    {
        this.Id = id;
        this.User = user;
        this.Text = text;
        this.DateTime = date_time;
    }

    public string Id { get; private set; }
    public string User { get; private set; }
    public string Text { get; private set; }
    public string DateTime { get; private set; }
}

按住评论时出现的弹出菜单在 Page.Resources 中定义:

<Page.Resources>
    <MenuFlyout x:Name="flyout1" x:Key="FlyoutBase1">
        <MenuFlyoutItem x:Name="ReportCommentFlyout" 
                        Text="{Binding User, Converter={StaticResource ReportOrDeleteComment}}" 
                        Click="ReportCommentFlyout_Click"/>
    </MenuFlyout>
</Page.Resources>

现在,在 ReportCommentFlyout_Click 中,我需要知道正在报告/删除的评论 ID。 我该怎么做?

我试过了

string CommentId = ((Comment)e.OriginalSource).Id;

但是应用崩溃了……

【问题讨论】:

    标签: c# xaml winrt-xaml windows-phone-8.1


    【解决方案1】:

    您的应用程序崩溃是因为您将 e.OriginalSource 转换为 Comment 并且它不起作用,因为它不是那种类型。通常,使用“as”通常更安全

    var comment = someObject as Comment;
    if (comment != null)
    {
    
    ....
    
    }
    

    关于你的问题,你试过了吗

    var menuFlyoutItem = sender as MenuFlyoutItem;
    if (menuFlyoutItem != null)
    {
        var comment = menuFlyoutItem.DataContext as Comment;
        if (comment != null)
        {
            string CommentId = comment.Id;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      相关资源
      最近更新 更多