c# - WPF:从 XAML 设置 ViewModel,为什么第二种解决方案不起作用?
问题描述
这个版本有效
<UserControl x:Class="FrequentKeywordsFinder"
xmlns:viewModels="clr-namespace:SeoZoomReader.ViewModels">
<UserControl.DataContext>
<viewModels:FrequentKeywordFinderViewModel />
</UserControl.DataContext>
这个版本不行
<UserControl x:Class="FrequentKeywordsFinder"
xmlns:viewModels="clr-namespace:SeoZoomReader.ViewModels"
DataContext="viewModels:FrequentKeywordFinderViewModel">
为什么?
解决方案
您需要将类型包含在花括号中的属性中:
<UserControl x:Class="FrequentKeywordsFinder"
xmlns:viewModels="clr-namespace:SeoZoomReader.ViewModels"
DataContext="{viewModels:FrequentKeywordFinderViewModel}">
而且(尽管我不知道与您的第一个版本的区别),如果您想以这种方式使用该类型,它需要派生MarkupExtension
并覆盖其ProvideValue
方法:
public class FrequentKeywordFinderViewModel : MarkupExtension
{
//...
public override object ProvideValue(IServiceProvider serviceProvider) => this;
}
推荐阅读
- java - 如何在 java 11 中添加 java.xml.bind (jaxb) 作为模块?
- vue.js - 如何使用条件而不将其附加到元素?
- python - 线程中的 Pytorch 异常:ValueError:信号编号 32 超出范围
- python - 使用 Tkinter 在 Python 中重置生成的小部件计数
- python - AWS Glue 与 SecretManager 用于数据库凭证
- google-apps-script - 基于复选框的 Google 表格编辑表格
- regex - 正则表达式来识别分配给方法名称
- matlab - 使用 Matlab fsolve() 找到具有 2 个变量的 2 个函数的零点
- elasticsearch - 如何使用无痛脚本获取 foreach 管道指令的当前条目?
- java - Openfire websocket内存泄漏