应用程序设置绑定到特定于实例的UserControl

时间:2013-03-25 12:54:35

标签: wpf binding user-controls application-settings

我的MyUserControl类型的应用程序中有三个控件。 MyUserControl包含一个Label,我想将其绑定到位于“应用程序设置”中的字符串。 MyUserControl的三个实例中的每一个都在应用程序设置中都有自己的字符串,分别名为Description1,Description2和Description3。

问题是我无法将UserControl中绑定的路径设置为位于应用程序设置中的字符串的名称,因为然后MyUserControl的每个实例都将绑定到相同的字符串。

我已经成功地完成了一些工作,但正如我在使用WPF时学到的那样,我提出的解决方案绝不是最好的做事方式:),所以我想知道是否有更好的方法可以做这个?以下是我现在使用的相关代码:

MyUserControl.xaml.cs

public partial class MyUserControl : UserControl
{
    public static DependencyProperty DescriptionProperty = DependencyProperty.Register("Description", typeof(string), typeof(MyUserControl));

    public string Description { get { return (string)GetValue(DescriptionProperty); } set { SetValue(DescriptionProperty, value); } }
}

MyUserControl.xaml

<UserControl x:Class="MyApplication.MyUserControl"
             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"
             xmlns:local="clr-namespace:MyApplication"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300" Name="myUserControl">

...

<Label Content="{Binding ElementName=myUserControl, Path=Description, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="0,0,0,6" />

MainWindow.xaml

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

...

<local:MyUserControl Description="{Binding Source={x:Static properties:Settings.Default}, Path=Description1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="myUserControl1" DataContext="{Binding ElementName=MainWindow, Path=Params}" />
<local:MyUserControl Description="{Binding Source={x:Static properties:Settings.Default}, Path=Description2, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="myUserControl2" DataContext="{Binding ElementName=MainWindow, Path=Params}" />

0 个答案:

没有答案