我确信这是一个可笑的无知问题,但无论如何我还是要问这个问题,因为我搜索了又搜索,要么不理解我所看到的解决方案,要么没有找到我所寻求的答案。
我有一个 MVVM 应用程序。我的 XAML 设置为 VM 的 DataContext,其中屏幕上的数据项是从 VM 的属性填充的。我的 CodeBehind 不处理数据,只处理与屏幕相关的内容。
我现在要做的是将某些 UI 元素绑定到 foo.xaml.cs (CodeBehind) 文件中的属性。例如,我想指定 FontSize 绑定到 CB 中的属性,以便在 CB 中的 WindowInitialized 处理程序中,它可以检测屏幕尺寸并更改所有屏幕项的 FontSize= 绑定到的一个变量。
我可以通过在虚拟机中创建公共属性,然后将 CB 中的值“注入”到虚拟机中来解决此问题。我知道这会起作用,但这是获得我想要的行为的一种迂回方式,一点也不简单,而且我确信这是错误的继续方式。
我四处搜寻并尝试过以下方法:
FontSize="{Binding RelativeSource={RelativeSource Self},Path="MyFontSize"
(其中“MyFontSize”是一个公共 int 属性)和我找到的各种其他示例,但没有一个起作用。
具体来说,如果我的 CodeBehind 类被调用名称更改设置主窗口这就是“MyFontSize”属性所在的地方,
public partial class NameChangeSetupMainWindow : Window
{
private int m_fontSize = 14;
public int MyFontSize
{
get { return m_fontSize; }
set
{
if (m_fontSize != value))
{
m_fontSize = (value > 0) ? value : 10;
}
}
}
...
... rest of the class...
...
}
虚拟机被称为名称更改设置视图模型这就是“真实”数据所在的地方,DataContext 指向 ala:
<Window.DataContext>
<local:NameChangeSetupViewModel/>
</Window.DataContext>
XAML 中的语法是什么,用于将那些 UI 项(与 UI、字体大小等相关的工具提示)绑定到 CodeBehind 中的变量,而不是将它们存放在 VM 中?
预先感谢您提供的任何指导。