将.net对象属性绑定到窗口属性

本文关键字:属性 窗口 绑定 对象 net | 更新日期: 2023-09-27 18:05:07

我有一个定义的类

namespace testApp.ViewsModels
{
 public class myWindowSettings
 {
  public int myWindowHeight { get; set; }
  public String myWindowTitle { get; set; }
  public myWindowSettings()
   {
    myWindowTitle ="My Name Here";
    myWindowHeight =211;
   }
 }
}

并使用它作为我的视图模型。在.xaml的窗口标签中,我声明了:

xmlns:viewModels="clr-namespace: testApp.ViewsModels"

Windows.Resources中我定义了一个ObjectDataProvider

<ObjectDataProvider x:key="myWindowSetting" ObjectType={x:Type viewModels:myWindowSettings}" />

我可以用它来绑定textBlock文本属性

<TextBlock x:Name="textBloxk" Text="{Binding Path=myWindowTitle, Source={StaticResource myWindowSetting}, Mode=OneTime}" />

但是当我试图将它绑定到窗口属性

Title="{Binding Path=myWindowTitle, Source={StaticResource myWindowSetting}, Mode=OneTime}"

我得到一个异常。异常:

'System.Windows.Markup.XamlParseException' in PresentationFramework.dll.Additional information: 'Provide value on 'System.Windows.StaticResourceExtension' threw an exception.' 

行号…和行位置'9'.

如何将myWindowSettings类型的对象绑定到窗口?

将.net对象属性绑定到窗口属性

尝试将窗口的DataContext设置为myWindowSetting,通过使用以下问题的答案:

WPF将窗口标题绑定到ViewModel属性

也许这将工作。我认为问题在于上面的代码在知道资源myWindowSettings之前初始化了窗口。如果您将ObjectDataProvider对象放在其他地方,它也可以工作。但是要做到这一点,您需要编写更多的代码。

使用以下代码绑定数据-上下文

<Window.DataContext>
    <viewModels:myWindowSettings x:Name="myWindowSetting" />
</Window.DataContext>

将标题属性绑定如下:

Title="{Binding Path = myWindowTitle, Mode=OneTime}"