c# - 自定义 XAML 绑定源类
问题描述
我正在尝试找到一种更好的方法来声明 UWP XAML 页面使用的 ViewModel。
这一刻,
- 我声明了一个
ViewModelClass
包含我的数据属性的 ViewModel 类。 - 然后我声明该类的一个实例作为
StaticResource
页面。我喜欢在我的所有页面设计中调用这些VIEW
以保持一致性。 - 最后,我将 Page 的 DataContext 声明为
StaticResource
VIEW
.
这会产生一个页面,该页面了解正在使用的数据结构并在工作绑定时允许自动完成。很好,虽然有很多行相同的旧代码。
只是,它并不真正适合 ViewModel,因为声明的资源是静态资源。它在页面实例化时被实例化。大多数页面会收到一个 ViewModel 参数 on NavigatedTo
,它不能用于替换静态资源,因为它是,好吧。静止的。
所以我最终DataContext
在导航时将页面从初始引用更改VIEW
为我实际想要使用的 ViewModel 实例。
DataContext
需要注意的是,当在 Master-Detail 情况的深处相当可怕时,要声明对页面的反向引用。想象一个集合,其显示部分取决于大师的财产。
你如何DataContext
从页面内的任何地方牢固地绑定到页面?
我尝试为页面命名(PAGE
为简单起见),然后使用ElementName=PAGE, Path=DataContext.someProperty
. 丑陋,再加上你丢失了 . 所代表的类的所有信息DataContext
。
另一种方法是围绕只有一个属性的实际ViewModel
调用创建一个 Wrapper : . 现在我可以将包装器声明为,并告诉页面的顶层用作它的. 工作,可靠,但太笨拙和麻烦。StaticViewModel
public ViewModel viewModel
StaticResource
FrameworkElement
VIEW.viewModel
DataContext
我很想实现一个SOURCE
名为绑定的类,PageDataContext
它只会循环进入页面并DataContext
从那里获取。想象:{Binding someProperty, Source={PageDataContext}
我将如何为 UWP 应用程序声明所说的源类???
解决方案
我很想为称为 PageDataContext 的绑定实现一个 SOURCE 类,它只会循环进入页面并从那里获取 DataContext。想象一下:{Binding someProperty, Source={PageDataContext}
对于您的要求,您可以在页面中实现您的视图模型Resources
并为其提供 x:key。当您绑定视图模型的属性时,您可以使用 x:key 访问此视图模型,Source={StaticResource ViewModel}
更多信息请参考以下代码。
视图模型
public class ViewModel
{
public ViewModel()
{
Visibility = false;
}
public bool Visibility { get; set; }
}
Xaml
<Page.Resources>
<local:ViewModel x:Key="ViewModel" />
</Page.Resources>
<TextBlock
Width="100"
Height="44"
Text="{x:Bind Name}"
Visibility="{Binding Visibility, Source={StaticResource ViewModel}}" />
推荐阅读
- jenkins - 詹金斯节点 ssh 连接失败
- azure - 安装 Azure 网络驱动器时出现错误 53
- ios - 从另一个“getDocument”查询中的“getDocument”查询中检索数据
- php - PHP中的分号是可选的吗?
- php - 嵌套 REST API 路由验证
- opendaylight - Opendaylight 功能安装“odl-dlux-core/0.0.0 没有匹配的功能”错误
- oop - 在 Fortran 中定义和调用构造函数
- java - 使用 PLSQL 执行 jar 文件
- cordova - Cordova 8:无法从“ios”安装,因为它不包含 package.json 文件
- mysql - Mysql数据库,将存储在文本中的日期(dd/mm/yy)转换为日期时间的问题