【问题标题】:WPF - bind an .NET object property to a window propertyWPF - 将 .NET 对象属性绑定到窗口属性
【发布时间】:2016-08-31 20:26:36
【问题描述】:

我有一个定义好的类

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 的 Window 标记内:

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

在Windows.Resources 中我定义了一个ObjectDataProvider

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

我可以使用它来绑定到 textBlock Text 属性

<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 类型的对象绑定到 Window?

【问题讨论】:

  • 在 App.xaml 中定义;因为它不在该窗口元素的范围内

标签: c# wpf


【解决方案1】:

尝试使用以下问题的答案将 Window 的 DataContext 设置为 myWindowSetting:

WPF Bind Window Title to ViewModel Property

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

【讨论】:

    【解决方案2】:

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

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

    如下绑定title属性:

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

    【讨论】:

    • Pratik,效果很好。而且因为我的名声还不到15分,所以我不能改变你的帖子的宣传。真的很抱歉。无论如何,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 2020-04-01
    相关资源
    最近更新 更多