【问题标题】:Dynamic Binding for Settings?设置的动态绑定?
【发布时间】:2025-12-21 07:40:17
【问题描述】:

我遇到了一个问题,我有一个包含多个设置文件但具有完全相同字段的应用程序。

示例:

  • Profil1.settings
  • Profil2.settings
  • Profil3.settings

我想在我的设置窗口 XAML 中做的是动态更改每个配置文件的绑定源。

目前我的 XAML 绑定如下所示:

SelectedValue="{Binding Source={x:Static Local:Properties.Profil1.Default}, Path=CurrentProfil, Mode=TwoWay, UpdateSourceTrigger=Explicit}"

我的问题是如何用“Profil2”替换“Profil1”而不通过我的代码为每个控件一个一个地重新制作我的所有绑定?是否可以在 XAML 绑定源中使用一些反射变量之王,而不是简单地使用 Profil1 类型或 Profil2 类型更改该变量的类型?

谁能帮我解决这个问题?

提前致谢。

【问题讨论】:

  • 我有一些线索,通过使用“动态”类型,我可以将不同的 Profil 类型分配给动态变量并从中检索设置。这是在代码中工作,但我不知道如何使它与 XAML 绑定一起工作。如果我尝试在绑定源中绑定动态类型变量,编译器会在构建时抛出错误。

标签: wpf xaml reflection binding settings


【解决方案1】:

您要做的是将设置窗口的 DataContext 设置为适当的配置文件。您可以随心所欲地执行此操作,但是这样做,您的所有绑定都将指向该对象。要使绑定像现在一样工作,您可以:

<Window x:Class="MyNamespace.MyWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:Local="clr-namespace:MyNamespace"
        DataContext="{Binding Source={x:Static Local:Properties.Profil1.Default}}">

    ...

    <ComboBox SelectedValue="{Binding Path=CurrentProfil, Mode=TwoWay, UpdateSourceTrigger=Explicit}" />

【讨论】:

  • 我直到星期一才上班,但它看起来像是解决方案。我所要做的就是通过代码将窗口的 DataContext 更改为正确的配置文件,然后就完成了。这比使用动态类型对象和绑定要容易得多。谢谢。