清除WPF中的“设置”绑定

时间:2014-03-03 20:54:17

标签: c# .net wpf xaml

我最近在XAML中对我的配置设置进行了大量绑定。存储列宽/控制尺寸/窗口位置等。所以我想知道是否有一种简单的方法来创建并绑定到XAML的“设置/配置”值?

现在我只是在项目中创建一个设置,将一个可绑定的属性推送到XAML的DataContext中并从那里开始。但我的设置数量变得非常疯狂,管理它们变得很痛苦(无聊,重复和烦人)。

在一个理想的世界里,我想要一个我可以做这样的事情的系统:

<Window State={Binding {Settings Name="MyWindowState", DefaultValue="Normal"}}/>

如果“MyWindowState”设置不存在,它将自动创建并存储在某处。如果MyWindowState设置发生更改,则使用它的所有绑定也会相应地得到通知和更新。如果设置检索失败,将使用DefaultValue。

是否存在类似于此的内容,或者是否可以使用标准WPF XAML实现?

我正在计划开展一些可以做到这一点的事情,但如果已经存在经过验证的解决方案,我很乐意至少看一下/听出来。

根据我的理解,Telerik's persistance framework可以做类似这样的事情,除了控制基础控制(没有全局“设置”我可以绑定),至少乍看之下。

3 个答案:

答案 0 :(得分:0)

您可以使用附加属性执行此操作:

<Window loc:WindowState.Name="MyWindowState" />

在附加属性的OnNameChanged事件处理程序中,您将可以访问设置了WindowState.Name属性的Window实例并访问该值(“MyWindowState”<已设置的/ em>在此示例中)。在那里,您开始倾听(例如,使用PropertyChangedEventManager)更改您要保留的窗口状态Window实例的所有属性。

答案 1 :(得分:0)

可能你可以使用WPF的主题选项。您可以将控件的设置(宽度,颜色...)存储在主题文件中,该文件只是一个xml文件。您可以将此xml存储在某处并在运行时加载它。当应用程序退出时,您可以更新此xml。并在下一次打开应用程序时加载它。

答案 2 :(得分:0)

是的,这很有可能。如果您有应用程序属性文件,则可以像这样访问它:

Height="{Binding MainWindowHeight, Mode=TwoWay, Source={x:Static p:Settings.Default}}"

其中MainWindowHeight是一个设置(在我的例子中,是一个int)。您还需要将此信息包含在XAML文件的顶部,WindowUserControl标记中:

xmlns:p="clr-namespace:APPLICATION_NAME.Properties"

其中,APPLICATION_NAME是您的应用程序的名称。

编辑:绑定可以有任何模式,我只是使用TwoWay,所以我不需要任何实际的代码来更新它。对于我的窗户的定位,这样做很好。

编辑:此外,这不能动态创建设置。我会在你的应用程序中使用一个XML文件,创建一个类来处理它,然后绑定到类的方法来获取/动态创建值。