删除然后添加项目时,Windows Phone Toolkit 上下文菜单项绑定了错误的对象

2023-12-12

我刚刚遇到了上下文菜单的严重问题,几个小时都无法解决。

为了重现该问题,我在 Visual Studio 2012 中使用 Windows Phone 8 的应用程序模板创建了一个全新的 Panorama 应用程序。我通过 nugget 安装了 Windows Phone 工具包,并在绑定到 Items 的第一个长列表选择器的数据模板中添加了上下文菜单

<StackPanel Margin="0,-6,0,12">
    <TextBlock Text="{Binding LineOne}" TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}" FontSize="{StaticResource PhoneFontSizeExtraLarge}"/>
    <toolkit:ContextMenuService.ContextMenu>
        <toolkit:ContextMenu>
            <toolkit:MenuItem Header="{Binding LineOne}" Click="MenuItem_Click_1" Tag="{Binding}">
            </toolkit:MenuItem>
        </toolkit:ContextMenu>
    </toolkit:ContextMenuService.ContextMenu>
</StackPanel>

我将标头设置为 LineOne 属性以便于调试。我附上了以下事件:

private void MenuItem_Click_1(object sender, RoutedEventArgs e)
{
    var itemViewModel = (ItemViewModel)((MenuItem)sender).Tag;
    App.ViewModel.Items.Remove(itemViewModel);
    App.ViewModel.Items.Add(new ItemViewModel { LineOne = "Test", LineTwo = "Test", LineThree = "Test" });
}

我运行该应用程序并使用上下文菜单删除第一项。第一项消失,名为 Test 的新项按预期出现在列表底部。如果我持有这个新项目,菜单项将绑定到“运行时一个”(已删除的项目)。

这是我可以重现错误的最简单的代码,但在我的真实应用程序中,我遇到了几乎相同的问题,并且有更有意义的代码用于在不同的方法甚至不同的页面中添加和删除。我有一个命令绑定,但由于数据绑定错误,该命令在错误的视图模型中使用错误的参数运行。

知道为什么会发生这种情况吗?


对于像我这样不想重新编译工具包的人来说,这里有一个基于 pantaloons 答案的简单解决方法。简单地添加 Opened 事件处理程序:

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

事件处理程序代码:

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;

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

删除然后添加项目时,Windows Phone Toolkit 上下文菜单项绑定了错误的对象 的相关文章

  • ToggleButton 控件 VisualStateManager:处理多个悬停状态

    参考我之前的问题 Silverlight MVVM 困惑 基于状态更新图像 https stackoverflow com questions 5034189 silverlight mvvm confusion updating imag
  • 使用 Caliburn.Micro 将绑定选择更改为 ViewModel

    我们在一个新的 Silverlight 项目中使用了 Caliburn Micro 一切都运行良好 内置约定将按钮单击事件绑定到 viewModel 但我不确定处理数据网格和组合框上的 SelectionChanged 事件的最佳方法是什么
  • iPhone 上的 Flash(或 Silverlight)

    我对在 iPhone 上开发应用程序感兴趣 并且作为一名 NET 和 ActionScript 开发人员 我对 Objective C Cocoa Touch 编程的学习曲线有点害怕 我知道 Adob e 已经为 iPhone 准备好了 F
  • WPF/Silverlight 面试问题? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 您希望某人在 WPF Silverlight 开发工作的面试中了解哪些类型的问题 入门级 强大的 NET 2 0背景并且愿意学习 解释一下依赖属
  • 以编程方式更改应用栏图标

    在我的 C Windows Phone 8 应用程序中 我有一个 AppBar 我的这个 AppBar 上有两个图标 一个是新图标 一个是编辑图标 我想将编辑图标更改为每当按下时返回图标 然后每当再次按下时返回编辑图标 我已经尝试过这段代码
  • 为 Windows Phone 7 创建自定义 InputScope

    在哪里可以找到创建自定义 InputScope 的教程 我想创建一个自定义键盘 在屏幕键盘上仅显示数字 1 9 无符号 您无法创建自定义输入范围 以下是支持的范围输入范围名称值枚举 http msdn microsoft com en us
  • WCF RIA 服务 - 返回两个已定义类的自定义类

    我有一个使用 EF 4 的 Silverlight WCF RIA 服务应用程序 当前 有一个域服务返回两种类型的类 OrderItem 和 Event 我想创建一个包含这两项的类 以便更轻松地在 XAML 级别操作数据 下面是结合了这两个
  • 确定我的 Silverlight 应用程序的版本

    我正在尝试确定 Silverlight 应用程序的版本号 目前我正在使用 string name Assembly GetExecutingAssembly FullName AssemblyName asmName new Assembl
  • Windows Phone 8 错误 - 应用程序安装失败

    我正在开发一个 Windows Phone 8 项目 我们通过 HockeyApp 将其部署为公司应用程序 我有一个从我们的赛门铁克证书生成的 PFX 文件 并且设备上安装了正确的 aetx 文件 如果我获取打算部署的 XAP 文件并将其复
  • silverlight/xaml 中通知的图标徽章覆盖

    我的 silverlight 应用程序中有一个功能区栏 并且在其中一个图标上我希望有一个徽章图标 显示该图标激活的视图中的项目数 想象一下 OS X 中显示未读邮件数量的邮件图标或 IOS 应用程序图标上的通知计数器 我对 xaml 样式不
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • .net 运行时 - Silverlight 运行时 =?

    我用 google 搜索了一下 但没能找到 net CLR 中的哪些类未包含在 CoreCLR 又名 Silverlight 中的详细列表 Windows net Framework 中缺少什么 Silverlight 另外 是否存在 Si
  • Silverlight 5 - 改进/更改的综合列表

    是否有 silverlight 5 新增功能的完整列表 我看到了不同的博客等 但显然问题在于细节 当他们说更好的绑定支持到底有什么不同更好 等等 我想看详细的论文 Pete Brown 列出了 RC 中的主要变化 http 10rem ne
  • 使用 LINQ 的 Silverlight 客户端数据库

    我正在创建一个浏览器外 silverlight 应用程序 并希望在客户端有一个数据库 我看过 sqlite 但似乎它不适用于 silverlight 如果我能使用 LINQ 那就太好了 我更喜欢免费的解决方案 但付费始终是一种选择 有什么建
  • 如何将这个基于代码的 WPF 工具提示转换为 Silverlight?

    以下工具提示代码适用于WPF 我正在努力让它发挥作用银光 但它给了我这些errors TextBlock does not contain a definition for ToolTip Cursors does not contain
  • 使用 MVVM 和 Silverlight 的“等待”屏幕的通常首选方法

    我正在推进一个小型的概念验证应用程序 这主要是为了增强我在 Silverlight 中的 MVVM 技能 今天遇到一个有趣的问题 我不知道如何解决 MVVM 方式 我在搜索过程中也没有成功找到任何相关内容 关于这个问题 我有一个带有数据库后
  • 我可以将 dll 添加到 Silverlight 3 应用程序吗?

    我试图将 dll 文件添加到我的 Silverlight 应用程序中 但收到错误 提示我无法添加不是使用 Silverlight 运行时构建的引用 有什么解决办法吗 Thanks 尝试使用 WCF 服务连接到您的 DLL 我就是这样做的 它
  • 从 Windows Phone 中的 HttpWebResponse 标头读取 HttpOnly Cookie

    有没有办法从 Windows Phone 中的 HttpWebResponse 标头读取 HttpOnly Cookie 在我下面的代码中 设置 Cookie 不存在于响应 Cookies My code HttpWebRequest we
  • 使用 Linq to XML 将 XElement 添加到 XML 文件

    使用 Linq to XML 我尝试将 XElement 添加到现有 XML 文件 它必须在 Windows Phone NET 框架中完成 目前我的 XML 文件如下所示
  • 如何获取 UIElement 的父 Popup?

    我对以下标记有两个问题

随机推荐