1. ホーム
  2. wpf

[解決済み] 静的プロパティへのバインディング

2022-04-15 03:09:37

質問

単純な静的文字列プロパティをテキストボックスにバインドするのに苦労しています。

以下は、staticプロパティを持つクラスです。

public class VersionManager
{
    private static string filterString;

    public static string FilterString
    {
        get { return filterString; }
        set { filterString = value; }
    }
}

私のxamlでは、この静的プロパティをTextBoxにバインドしたいだけです。

<TextBox>
    <TextBox.Text>
        <Binding Source="{x:Static local:VersionManager.FilterString}"/>
    </TextBox.Text>
</TextBox>

すべてコンパイルされますが、実行時に次のような例外が発生します。

属性の値を変換することはできません。 'ソース' 型のオブジェクトに 'System.Windows.Markup.StaticExtension'. オブジェクトでエラーが発生しました。 の 'System.Windows.Data.Binding' である。 マークアップ・ファイル 'BurnDisk;component/selectversionpagefunction.xaml'です。 57行目 Position 29.

何が間違っているのか、何か思い当たることはありますか?

解決方法は?

バインディングが双方向である必要がある場合、パスを指定する必要があります。

クラスが静的でない場合、静的プロパティで双方向バインディングを行うには、リソースでクラスのダミー・インスタンスを宣言し、それをバインディングのソースとして使用するというトリックがあります。

<Window.Resources>
    <local:VersionManager x:Key="versionManager"/>
</Window.Resources>
...

<TextBox Text="{Binding Source={StaticResource versionManager}, Path=FilterString}"/>