ContextMenu 的 MenuItem DataContext 返回旧项目

2024-04-14

我在 LongListSelector 中使用 ContextMenu,以便可以删除绑定到 LLS 的列表中的一些项目。

我正在遵循最近的指南here http://www.windowsphonegeek.com/articles/the-new-longlistselector-control-in-windows-phone-8-sdk-in-depth为了实现LLS(尽管我没有使用JumpList)。我唯一改变的是让基组类扩展 ObservableCollection 而不是 List。

我遇到的问题是,一旦我实现了 ContextMenu 并从那里删除,我可以从可见列表中的同一“位置”删除两次,然后它就会崩溃。 调试显示,第二次删除后,MenuItem 的 Datacontext 返回上一个被删除的项目。所以当我在列表中搜索它时,我得到的索引是-1。我可以理解这一点,但我不知道如何找出真正选择的项目。

我的 contextMenu 的 XAML 部分如下:

<phone:LongListSelector.ItemTemplate>
    <DataTemplate>
        <Grid toolkit:TiltEffect.IsTiltEnabled="True">
            <toolkit:ContextMenuService.ContextMenu>
                <toolkit:ContextMenu  x:Name="conmen" Loaded="ContextMenu_Loaded">
                      <toolkit:MenuItem Header="Delete" Click="DeleteItem_Click"/>
                </toolkit:ContextMenu>
            </toolkit:ContextMenuService.ContextMenu>

             <Grid.ColumnDefinitions>
                 <ColumnDefinition Width="Auto"/>
                 <ColumnDefinition Width="*"/>
                 <ColumnDefinition Width="Auto"/>
             </Grid.ColumnDefinitions>

             <Border Grid.Column="0" Background="{StaticResource PhoneInverseBackgroundBrush}" Padding="{StaticResource PhoneTouchTargetOverhang}">
                 <TextBlock Text="{Binding Usr, StringFormat='x{0}'}" FontSize="32" HorizontalAlignment="Left" Width="48"/>
             </Border>

             <Border Grid.Column="1" Background="{StaticResource PhoneInverseBackgroundBrush}" Padding="{StaticResource PhoneTouchTargetOverhang}">
                 <TextBlock Text="{Binding Name}" FontSize="32" HorizontalAlignment="Left" />
             </Border>

             <Border Grid.Column="2" Background="{StaticResource PhoneInverseBackgroundBrush}" Padding="{StaticResource PhoneTouchTargetOverhang}">
                <TextBlock Text="{Binding Type, StringFormat=\{0:C\}}" FontSize="32" HorizontalAlignment="Right" />
             </Border>
        </Grid>
    </DataTemplate>
</phone:LongListSelector.ItemTemplate>

这是我删除该项目的 delete_click 函数的开始:

    private void DeleteItem_Click(object sender, RoutedEventArgs e)
    {            
        var menItem = (MenuItem)sender;
        editCartItem = (Model.Cartitem)menItem.DataContext;

        cartIndex = editCartItem.Id;

        deleteIndex = this.cartList.FindIndex(FindItem);

两次删除后,(Model.Caritem)menItem.DataContext 返回先前删除的项目。

我已经搜索了一段时间,并发现了几年前针对不同框架和场景的类似案例。我想知道 WP8 中是否有更新的方法可以执行此操作。

我看到过使用 Loaded 或 Opened 事件手动重新分配 ContextMenu 的数据上下文的建议,但 DataContext 仍然依赖于 LLS 中的特定项目。所以我不能仅仅将它的上下文指向 LLS。

我还发现它被指出是一个带有补丁的错误here http://silverlight.codeplex.com/workitem/7888这看起来完全像我的问题,但我不知道如何应用补丁,或者它是否与我的 WP8 情况有关。

我还一直确保 LLS 的所选项目已清除,并尝试在每次操作后重新分配它的 itemSource,但无济于事。

任何正确方向的帮助或建议都会很棒。我在这里看到了一些关于此的帖子,但我相信我已经通过了这些要点(例如简单地获取 menuItem 并使用 ObservableCollection...)。


xaml:

<toolkit:ContextMenu Opened="ContextMenu_Opened">... </toolkit:ContextMenu>

c#

private void ContextMenu_Opened(object sender, RoutedEventArgs e)
{
    var menu = (ContextMenu)sender;
    var owner = (FrameworkElement)menu.Owner;
    if (owner.DataContext != menu.DataContext)
        menu.DataContext = owner.DataContext;
}

你可以看到:删除然后添加项目时,Windows Phone Toolkit 上下文菜单项绑定了错误的对象 https://stackoverflow.com/questions/15181441/windows-phone-toolkit-context-menu-items-have-wrong-object-bound-to-them-when-an

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ContextMenu 的 MenuItem DataContext 返回旧项目 的相关文章

  • WPF 工具包数据网格 - 自定义选项卡

    我有一个包含 3 列的 WPF 工具包 DataGrid 只有第三列允许数据输入 前两列是静态的 文本描述 是否可以控制选项卡和导航 以便选项卡和上下左右按钮将忽略前两列并在第三列的范围内运行 您可以使用以下命令禁用前两列上的制表符IsTa
  • Windows Phone 8(WP8) C# 代码不安全?

    编辑 您可以使用不安全的代码 您只需手动编辑 proj 文件 当我可以在手机上使用本机 C 代码时 为什么或为什么 WP8 上的 C 不支持不安全代码 我没想到这一点 我的意思是 拜托 我对 Microsoft 试图强行使用 C 的做法感到
  • WP8 LongListSelector - 重新分配 ItemsSource 无效

    我正在使用新的 Windows Phone 8LongListSelector控制 它有其ItemsControl分配给一个List
  • 分组 LongListSelector:标题出现,项目不出现

    C 中的 WinPhone 8 项目 我正在尝试填充分组列表 组标题出现 但项目不出现 相关代码是 class MyPage public class Group IGrouping
  • 是否可以将现有的 Windows Phone 8 应用程序更新到 Windows Phone Store 8.1

    我在 Windows Phone 应用商店中有一个 Windows Phone 8 0 应用程序 我想将我的应用程序更新到 Windows Phone 商店 API 而不是 Windows Phone Silverlight 8 1 以准备
  • WP8 联系人异步搜索 - 仅返回带有电话号码的联系人?

    我正在开发一个需要自定义联系人列表的应用程序 到目前为止 该应用程序查询联系人 将它们全部显示在列表框中 允许多项选择 并且现在仅将所有选定的电话号码写入调试器输出 但我注意到的一件事是 在同步搜索后所有联系人都可用 因此其中一些不包含电话
  • ObservationCollection 使用 MVVM 架构在 PCL 内的 ViewModel 中实现 ISupportIncrementalLoading 以支持 WinRT 和 WP8/WinPRT

    我的 ViewModel 位于 PCL 内 因为我正在并行开发 Windows 8 1 和 Windows Phone 应用程序 我的 ViewModel 中有一个作为 ObservableCollection 的内容列表 我在 Windo
  • Windows Phone 8 Facebook 身份验证

    我正在开发一个适用于 Windows Phone 8 的应用程序 我想让用户可以使用他们的 Facebook 帐户登录 这样他们就不必在我的应用程序上创建帐户 我看到了 Facebook SDK for NET 并决定使用它 因为它似乎非常
  • WP8:使用ApplicationBar截屏

    如何使用 ApplicationBar 截屏 我使用的例子来自这个分行 https stackoverflow com questions 5553429 wp7 take screenshot from application 但通过这种
  • 如何检测两个同时触摸?

    Windows Phone 8 中的触摸检测利用了 System Windows Input Touch FrameReported 事件 该事件是开发人员可用的最原始且响应速度最快的触摸事件 您可以像这样使用该事件 public Main
  • 在 Windows Phone 8 中设置广告

    我发现了一些对类似问题的零散回复 主要是 Windows Phone 7 但我想发布一个包含 Windows Phone 8 广告的所有要求的答案 我在 Windows Phone 8 中设置广告时遇到了一些问题 每次运行模拟器时 我都会遇
  • 更改 WPF Toolkit 图表中绘图区域和标题周围的边距

    我正在使用 WPF Toolkit 2010 年 2 月版本的 Chart 控件 图表相对于绘图区域占用了大量空间 如何控制绘图区域和图表标题周围的边距 这样 我可以将我需要的 10 个图表排列在网格中 而无需在屏幕上使用太多空间 Than
  • HttpClient 响应未刷新

    我正在使用 HttpClient 与 Web 服务进行通信以进行发送 接收 JSON 格式的响应 但我在接收数据时遇到一些问题 我每 5 分钟调用一次 Web 服务 使用 HttpClient 刷新 Windows Phone 上的内容 但
  • 以编程方式更改应用栏图标

    在我的 C Windows Phone 8 应用程序中 我有一个 AppBar 我的这个 AppBar 上有两个图标 一个是新图标 一个是编辑图标 我想将编辑图标更改为每当按下时返回图标 然后每当再次按下时返回编辑图标 我已经尝试过这段代码
  • 如何在 Windows Phone 8 中安装 .xap PhoneGap 版本?

    我使用phonegap android开发了一款简单的游戏 但在为Windows iOS Android 黑莓等构建后 它仅适用于Android设备 因此我可以为Android设备安装apk文件 但在Windows xap文件中未检测到Wi
  • 只允许输入字母

    如何过滤虚拟键盘中的非字母键 以下方法仅适用于拉丁字母 不幸的是 public static bool IsLetter int val return InRange val 65 90 InRange val 97 122 InRange
  • Windows Phone 8 错误 - 应用程序安装失败

    我正在开发一个 Windows Phone 8 项目 我们通过 HockeyApp 将其部署为公司应用程序 我有一个从我们的赛门铁克证书生成的 PFX 文件 并且设备上安装了正确的 aetx 文件 如果我获取打算部署的 XAP 文件并将其复
  • 如何以编程方式设置 TextBlock 前景十六进制颜色

    我必须实用地使用文本块的前景色十六进制颜色 它不起作用 请帮助我 我试过这个例子 txtHome Foreground new SolidColorBrush Colors Red 但我想使用十六进制颜色代码而不是使用 Color red
  • 如何更改 LongListMultiSelector 中的 CheckBox 和 CheckBox 勾号的颜色? WP8

    是否可以更改 LongListMultiSelector 中的复选框和复选框勾选的颜色 我已经尝试过乔治 尼古拉德斯的解决方案 但我无法达到我所需要的 还有其他方法可以做到这一点吗 请问有人可以更详细地解释一下吗 如果它是可能的 提前致谢
  • PhotoChooserTask 抛出未处理的异常

    我已经有了这段代码 我使用它来显示一个按钮 该按钮允许用户从他的库中选择图像并将其用作我的应用程序的背景 所以我创建了一个PhotoChooserTask 将其设置为显示相机并将其绑定到任务完成时必须执行的方法 该按钮将通过显示PhotoC

随机推荐

  • 如何判断 HTML5 音频元素何时播放完毕?

    如何判断 HTML5 音频元素何时播放完毕 它会引发我可以收听的事件或类似的事件吗 我需要在音轨结束时做出反应 Thanks 使用 HTML
  • 我可以在不使用本地工作副本的情况下将新文件夹添加到 TFS 存储库服务器端吗?

    我目前正在将一些源代码从 Subversion SVN 存储库传输到我客户的 Team Foundation Server 我偶然发现的一件事是 如果不首先将该存储库中的所有文件拉到本地工作区中的本地工作文件夹 则似乎无法编辑存储库 我正在
  • 如何在 Github Actions 中设置机密?

    官方样板代码注入npm token如下 NODE AUTH TOKEN secrets npm token 如何访问和设置该变量 我在 GUI 中找不到它 转到您在 Github 中的项目 选择Settings tab 点击Secrets左
  • 通过 Laravel 中的链接 href 传递 id

    是否可以通过 Laravel 中的链接 href 传递 id 并显示该页面 例如 projects display 2 我有这个链接 td a href class btn btn info View a td 当鼠标悬停在链接上时 它将
  • 如何使 extjs 手风琴垂直滚动

    在这里摆弄 https fiddle sencha com fiddle 5gv 如果手风琴中有很多面板 它们就会在垂直方向上相互碰撞 并且无法扩展 我想让手风琴的总高度等于标题的高度加上一个面板主体的高度 展开 然后父面板应该只有一个滚动
  • 自 2012 年底起实施@font-face

    我花了几个晚上研究在当今的现代浏览器中实现 font face 的最佳方法 我是一名全职网络 系统开发人员 具有图形设计师的背景 我发现网页设计的机会和可能性变得越来越有趣 因此 我做了一些测试 想听听是否有人对此有建议 更好的想法或意见
  • 禁用所有操作的浏览器缓存,但保留捆绑包的浏览器缓存

    在我正在开发的 MVC 应用程序中 出于安全原因 我们必须阻止所有操作的浏览器缓存 防止用户在注销后返回历史记录 我们使用以下方法实现了这一点这个解决方案 https stackoverflow com a 5664481 2123652
  • 使用 SQL 将多个字段连接成一个

    我有三张桌子tag page pagetag 有了下面的数据 page ID NAME 1 page 1 2 page 2 3 page 3 4 page 4 tag ID NAME 1 tag 1 2 tag 2 3 tag 3 4 ta
  • 如何在 Quarkus 中处理大文件上传

    我的问题有两个 我正在寻找一种在 quarkus 应用程序服务器上实现分段文件上传的方法 该服务器允许程序员访问上传的文件 浏览文档似乎有https quarkus io guides rest client multipart https
  • 使用 VSCode“切换行注释”命令时更改注释符号位置

    是否可以在 VSCode 中自定义注释符号 使用 Python 时为 的位置 例如 如果我的代码是 def my func value 1 我在第 2 行按 CMD 我得到 def my func value 1 我更愿意得到 def my
  • 如何构建此 SQL 查询。合并多个表? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 注意 这不
  • C# Entity Framework 4.1 Lambda Include - 仅选择特定包含的值

    我正在 EF4 1 上执行 lambda select 包括当前语句中的另一个相关 DBSet return dbEntity GameTypes Include a gt a Draws Where d gt d IsActive tru
  • 使用意图从 Unity 应用程序向 Android 应用程序发送数据

    我有两个独立的应用程序 AppA 使用 Android Studio 开发 和 AppB 使用 Unity 开发 AppA 将启动 AppB 这是一个游戏应用程序 用户玩完游戏 AppB 并点击退出按钮后 会将游戏记录 字符串数组 发送回A
  • C/C++ 计算小数位数?

    假设用户输入的是十进制数 例如 5 2155 有 4 位小数 它可以自由存储 int double 等 有没有clever 或非常简单 找出数字有多少位小数的方法 有点像如何通过屏蔽最后一位来发现数字是偶数还是奇数的问题 我知道的两种方法
  • 从构造函数调用的shared_from_this

    我必须在创建对象时在容器中注册该对象 如果没有智能指针 我会使用这样的东西 a class a class register somewhere this 对于智能指针我应该使用shared from this但我不能在构造函数中使用它 有
  • 带可选参数的 TCL 过程调用

    存在一个 TCL 脚本 该脚本具有多个名称相似的过程定义func在不同的命名空间中 程序如下 proc func a puts a 所有这类程序都只有一个参数a 所有此类过程都是从整个脚本中的一行调用的 func a 我需要创建另一个具有相
  • 没有子导航属性的 EF 一对多外键

    使用代码优先的实体框架和 NET 4 我尝试在父母与孩子之间创建一对多关系 public class Parent Key public int ParentId get set Required public string ParentN
  • 使子视图与父滚动视图的宽度匹配

    我有一个带有许多 EditText 子项的水平滚动视图 我希望这些子级中的每一个都与父级滚动视图的可见区域具有相同的宽度 这在 XML 中可能吗 您可以编写一个小辅助类来做到这一点 我们正在创建一个非常小的类来扩展EditText call
  • Cypress 获取 href 属性

    我有一个测试用例 其中有一个在新选项卡中打开的链接 由于 Cypress 不支持多个选项卡 我想获得href该链接的属性 然后在同一选项卡中打开它 我正在尝试这样做 但由于某种原因它不起作用 it Advertise link should
  • ContextMenu 的 MenuItem DataContext 返回旧项目

    我在 LongListSelector 中使用 ContextMenu 以便可以删除绑定到 LLS 的列表中的一些项目 我正在遵循最近的指南here http www windowsphonegeek com articles the ne