无法从 Listvew.Resources 内部访问视图模型属性

2023-12-26

我正在尝试将 SelectedItem 绑定到视图。但是当视图位于资源块内时,视图无法访问视图模型。 当数据上下文重新分配给子级时,绑定适用于文本块,但不适用于用户控件(NoteView)

我是否缺少任何绑定?

PFB 修改了(整个)代码和内联注释。

<UserControl x:Class="Konduva.View.NoteSearchView"
<!-- other namespaces here -->
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
DataContext="{Binding NoteSearch, Source={StaticResource Locator}}">
    <Grid>
    <ListView ItemsSource="{Binding Notes}"               
        SelectedItem="{Binding SelectedNote}">
        <ListView.Resources>
        <DataTemplate DataType="{x:Type vm:NoteViewModel}">
                    <DockPanel>
                        <TextBlock Text="{Binding Title}" />
                        <Popup Placement="Right"
                           PlacementTarget="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}"
                           IsOpen="{Binding (ListViewItem.IsSelected), RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}"
                           DataContext="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}">
                            <StackPanel>
  <!-- This is working -->      <TextBlock Text="{Binding SelectedNote.Title}" />
  <!-- This is not working -->  <v:NoteView DataContext="{Binding SelectedNote}" />                                
                            </StackPanel>
                        </Popup>
                    </DockPanel>
                </DataTemplate>
            </ListView.Resources>            
        </ListView>  
    </Grid>
</UserControl>

注意查看:

<Grid>
    <TextBlock Text="{Binding Title}" /> // This Text is not displayed
</Grid>

Update 3由于您在 NoteView 中使用 MvvmLight:,请尝试更改

DataContext="{Binding Note, Source={StaticResource Locator}}"

to

<UserControl.Style>
    <Style TargetType="UserControl">
        <Setter Property="DataContext" Value="{Binding Note, Source={StaticResource Locator}}"/>
    </Style>
</UserControl.Style>

Update 2

几分钟前遇到了类似的问题,我没有完全理解,所以我将在这里提出相同的解决方案,看看它是否有帮助。如果你把它改成这样会发生什么?

<v:NoteView DataContext="{Binding RelativeSource={RelativeSource AncestorType={x:Type Popup}},
                                  Path=DataContext.SelectedNote}"/>

Update

我无法重现这个。尝试将其添加到您的 NoteView 构造函数中。当您更改 ListView 中的选择时,您是否会到达 DataContextChangedHandler?

public NoteView()
{
    InitializeComponent();
    DependencyPropertyDescriptor dpd = 
        DependencyPropertyDescriptor.FromProperty(UserControl.DataContextProperty, 
                                                  typeof(UserControl));
    if (dpd != null)
    {
        dpd.AddValueChanged(this, new EventHandler(DataContextChangedHandler));
    }
}
void DataContextChangedHandler(object sender, EventArgs e)
{
    MessageBox.Show("DataContext Changed: " + DataContext);
}

第一个答案

您的 DockPanel 将获取 NoteViewModel 作为 DataContext,而不是 ListView,并且由于此 DataContext 被所有子级继承,所以每个子级最终都会得到 NoteViewModel 作为 DataContext。要将 ListView 用作 Popup 的 DataContext,您可以执行此操作。我不确定 StackPanel 的 DataContext 绑定会做什么,所以我可能会在这里遗漏一些东西。

<DataTemplate DataType="{x:Type vm:NoteViewModel}">
    <DockPanel>
        <TextBlock Text="{Binding Title}" />
        <Popup Placement="Right" 
               PlacementTarget="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}" 
               IsOpen="{Binding (ListViewItem.IsSelected), RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}"
               DataContext="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}">
            <StackPanel>
                <TextBlock Text="{Binding SelectedNote.Title}" />
                <StackPanel>
                    <v:NoteView DataContext="{Binding SelectedNote}"/>
                </StackPanel>
            </StackPanel>
        </Popup>
    </DockPanel>
</DataTemplate>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法从 Listvew.Resources 内部访问视图模型属性 的相关文章

  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • 更改 WPF 应用程序清单?

    我已经发布给微软的评论 http connect microsoft com VisualStudio feedback ViewFeedback aspx FeedbackID 420920WPF 中的对话框未启用 VisualStyle
  • WPF PRISM 事件订阅不会消亡

    我有一个 PRISM RegionManager 其中有几个区域 顶部的功能区区域和其下方用于我的视图的主要内容区域 相当基本 该应用程序以主要内容区域中的 主页 视图开始 当我单击功能区上的按钮时 我将第二个视图注入内容区域并在区域管理器
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • C# 中值类型和引用类型有什么区别? [复制]

    这个问题在这里已经有答案了 我知道一些差异 值类型存储在堆栈上 而引用类型存储在托管堆上 值类型变量直接包含它们的值 而引用变量仅包含对托管堆上创建的对象位置的引用 我错过了任何其他区别吗 如果是的话 它们是什么 请阅读 堆栈是一个实现细节
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 将日期参数传递给对 MVC 操作的 ajax 调用的安全方法

    我有一个 MVC 操作 它的参数之一是DateTime如果我通过 17 07 2012 它会抛出一个异常 指出参数为空但不能有空值 但如果我通过01 07 2012它被解析为Jan 07 2012 我将日期传递给 ajax 调用DD MM
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 使用 AWS Lambda 从 AWS S3 访问元数据

    我想检索每次将对象上传到 S3 时添加的一些元数据 使用控制台 x amz meta my variable 我已经通过控制台设置了 lambda 以便在每次将对象上传到我的存储桶时触发 我想知道我是否可以使用类似的东西variable e
  • 如何在Intellij IDEA 13.1中创建具有Maven结构的Spring MVC应用程序?

    我想创造新的春季MVC项目于Maven结构使用Intellij IDEA但不能那样做 实际上我想创建像这样的项目mkyong com http www mkyong com样品 例如this http www mkyong com spri
  • Android OpenGL ES 以宽高比全屏显示图像

    我想在我的 OpenGL 应用程序中全屏显示图像而不丢失其纵横比 我知道我可以将图像作为纹理绘制到 立方体 或二维平面上 但当我只想显示二维图像时 我不确定这是否真的是最好的方法 特别是因为我希望该图像全屏显示而不丢失其纵横比 我知道使用
  • new 不分配内存

    这应该会每秒填满我的内存 100 MB 左右 我使用 gnome systemmonitor 和 htop 跟踪内存使用情况 但不知怎的 事实并非如此 为什么 include unistd h include
  • 仅在完成加载后显示所有图像[重复]

    这个问题在这里已经有答案了 In div img src images 1 jpg img src images 2 jpg img src images 3 jpg img src images 4 jpg img src images
  • 不兼容的类型:推理变量 T 具有不兼容的边界[重复]

    这个问题在这里已经有答案了 我有下面的代码 public int solution int X int A List
  • 谷歌字体 Rubik 无法使用,或者我错过了什么?

    我在网站上使用 Google 的 Rubik 字体 仍在进行中 它 突然停止显示任何文本 似乎即使在 Google Font 网站上 该字体也无法正常工作 他们所有的设备和仪器都活着 在魔方下方没有显示 但如果你检查它 它就在那里 还有其他
  • CORS 播放框架

    我正在 Play Framework 2 5 Java 后端开发 Angular 2 应用程序 如果我通过浏览器 URL 访问我的端点 它们就可以正常工作 但是 从 Angular 2 应用程序调用它会显示错误 XMLHttpRequest
  • 有没有办法跟踪扩展的资源使用情况?

    我通过 GitHub 和 Google 搜索注意到很多人都有和我类似的问题 vscode 挂起 除了文本编辑器之外 什么都不起作用 有时除了调试之外一切都有效 像往常一样 禁用所有扩展使其可以完美运行 检查开发者工具 我注意到 Extens
  • HSQLDB ROWNUM 与 Oracle 的兼容性

    THe HSQLDB 变更日志 http hsqldb org doc 2 0 changelist 2 0 txt指出ROWNUM 被添加到v2 2 0在针对内存 HSQLDB 运行集成测试时 我使用它没有任何问题 但是 我想对真实的 O
  • 未捕获的类型错误:对象 [object Object] 没有方法“on”

    谁能帮我解决这个问题 当我使用最新 或较新 版本的 jQuery 时 下面的小脚本可以正常工作 但是 当我使用旧版本的 jQuery 时 我的脚本显示on函数不存在 这是我的脚本 不适用于旧版本的 jQuery document ready
  • C# json 到数组调试“应用程序进入中断模式”

    我想将 json 转换为数组 但当我尝试调试模式时 我得到 应用程序进入中断模式 并且如果我尝试运行它 程序就会冻结 我用的答案是将 json 转换为 C 数组 https stackoverflow com questions 95865
  • Javascript / jQuery 粘性,不使用 css 位置:固定

    我正在寻找一个用于粘性标题的 Javascript jQuery 插件 它不会将元素的样式切换到固定位置 通常 我正在使用这个http stickyjs com http stickyjs com 而且效果很好 我正在开发一个带有 jQ u
  • 如何忽略大文件并推送到 git repo

    之前我本地使用的是git 没有使用 gitignore然后 我创建了一个 gitignore文件 并将所有不需要的文件写入其中 当我将它们推送到 git repo 时 出现 fatal The Remote endhanged Outsta
  • 如何将一个 DataFrame 列转换为包含基于另一个 DataFrame 的列的真值表?

    我有一个df with a user id and a category 我想将其转换为真值表 以确定该用户是否至少有一个该类别的条目 但是 最终表还应包括 df list 中出现的所有类别的列 这些列可能根本不会出现在df 现在我用一个创
  • 在javascript中求10的幂,还有比这更好的方法吗

    我需要创建一个特定幂的整数值 这不是正确的术语 但基本上我需要创建 10 100 1000 等 幂 将被指定为函数参数 我想出了一个解决方案 但它感觉很老套而且错误 我想学习一种更好的方法 如果有一种方法 也许不是基于字符串的方法 此外 e
  • javascript退出for循环而不返回

    我有一个 for 循环 我想像这样退出 function MyFunction for var i 0 i lt SomeCondition i if i SomeOtherCondition Do some work here retur
  • 如何在palm mojo中使用jquery?

    我该如何才能在我的 palm mojo 应用程序中使用 jquery 查看这个问题 https stackoverflow com questions 1545773 palm pre frameworks 尤其是评论 编辑回应评论 我对P
  • 是否可以匹配React Router 4中路由的#部分

    在我的应用程序中 我想将路径和哈希与不同的组件相匹配 例如 pageA modalB 将显示 PageA 作为主页 模态 B 位于顶部 我尝试了以下方法 其中包含路径属性的许多变体
  • 无法从 Listvew.Resources 内部访问视图模型属性

    我正在尝试将 SelectedItem 绑定到视图 但是当视图位于资源块内时 视图无法访问视图模型 当数据上下文重新分配给子级时 绑定适用于文本块 但不适用于用户控件 NoteView 我是否缺少任何绑定 PFB 修改了 整个 代码和内联注