0

MyUserControl タイプのアプリケーションに 3 つのコントロールがあります。MyUserControl には、アプリケーション設定にある文字列にバインドするラベルが含まれています。MyUserControl の 3 つのインスタンスはそれぞれ、アプリケーション設定にそれぞれ Description1、Description2、および Description3 という名前の独自の文字列を持っています。

問題は、MyUserControl のすべてのインスタンスが同じ文字列にバインドされるため、UserControl のバインドのパスをアプリケーション設定にある文字列の名前に設定できないことです。

私は何かをうまく機能させることができましたが、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}" />
4

0 に答える 0