5

プログラムで静的プロパティにバインドする方法は? C# で何を使用して作成できますか

{Binding Source={x:Static local:MyClass.StaticProperty}}

更新: OneWayToSource バインディングを行うことは可能ですか? 静的オブジェクトには更新イベントがないため (少なくとも .NET 4 では)、TwoWay が不可能であることを理解しています。静的であるため、オブジェクトをインスタンス化できません。

4

2 に答える 2

8

一方向バインディング

Country静的プロパティを持つクラスがあると仮定しましょうName

public class Country
{
  public static string Name { get; set; }
}

Nameそして、プロパティをTextPropertyof にバインドする必要がありTextBlockます。

Binding binding = new Binding();
binding.Source = Country.Name;
this.tbCountry.SetBinding(TextBlock.TextProperty, binding);

更新: 双方向バインディング

Countryクラスは次のようになります。

public static class Country
    {
        private static string _name;

        public static string Name
        {
            get { return _name; }
            set
            {
                _name = value;
                Console.WriteLine(value); /* test */
            }
        }
    }

Nameそして、このプロパティをにバインドしたいTextBoxので、次のようにします。

Binding binding = new Binding();
binding.Source = typeof(Country);
binding.Path = new PropertyPath(typeof(Country).GetProperty("Name"));
binding.Mode = BindingMode.TwoWay;
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
this.tbCountry.SetBinding(TextBox.TextProperty, binding);

ターゲットを更新する場合は、次BindingExpressionの関数を使用する必要がありますUpdateTarget

Country.Name = "Poland";

BindingExpression be = BindingOperations.GetBindingExpression(this.tbCountry, TextBox.TextProperty);
be.UpdateTarget();
于 2012-11-25T09:47:26.477 に答える
0

静的クラスへのアクセスを提供するために、常に非静的クラスを作成できます。

静的クラス:

namespace SO.Weston.WpfStaticPropertyBinding
{
    public static class TheStaticClass
    {
        public static string TheStaticProperty { get; set; }
    }
}

静的プロパティへのアクセスを提供する非静的クラス。

namespace SO.Weston.WpfStaticPropertyBinding
{
    public sealed class StaticAccessClass
    {
        public string TheStaticProperty
        {
            get { return TheStaticClass.TheStaticProperty; }
        }
    }
}

バインディングは簡単です。

<Window x:Class="SO.Weston.WpfStaticPropertyBinding.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:SO.Weston.WpfStaticPropertyBinding"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <local:StaticAccessClass x:Key="StaticAccessClassRes"/>
    </Window.Resources>
    <Grid>
        <TextBlock Text="{Binding Path=TheStaticProperty, Source={StaticResource ResourceKey=StaticAccessClassRes}}" />
    </Grid>
</Window>
于 2012-11-25T10:59:40.937 に答える