从WPF中的Window类引用App类属性

时间:2010-11-22 19:10:56

标签: .net wpf

理想情况下,我想在App类中放置一些属性,以便我的WPF应用程序在窗口,对话框,控件等之间共享。从其他WPF组件引用这些属性是否微不足道,或者我应该让它们更容易静态访问?

2 个答案:

答案 0 :(得分:1)

在我看来,在App类中放置属性的最大问题是你的代码将紧密耦合。此外,属性可能超出了App类的范围。

如果您不关心模式,即您的应用程序不会增加复杂性,那么在App类中使用属​​性可能是一种快速而简单的解决方案。但是如果你在已经复杂(或不断增长)的代码中执行此操作,可能会让您陷入很多困境。

如果通过使属性为静态意味着将它们放在某个类中并在另一个类中引用它,则会得到一个紧密耦合的代码,但不够松散。

答案 1 :(得分:1)

如果在App类上公开属性,则可以通过设置DataContext以声明方式绑定到这些属性:

DataContext="{x:Static Application.Current}"
然而,我确实同意Eduardo,你最终将与你的App实施紧密结合。您可以通过定义静态类来缓解此问题,但可以为视图创建视图模型,这些模型在内部使用静态类来检索绑定的值。

如果您的大多数属性都是字符串,您可以在应用程序的资源中定义它们(为此,您需要将资源从内部更改为公共)并静态访问它们:

<Window 
    x:Class="MyApp.Shell" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" 

    xmlns:properties="clr-namespace:MyApp.Properties" 

    Title="{x:Static properties:Resources.Shell_Title}" WindowStartupLocation="CenterScreen" WindowState="Normal" 
></Window>