実際には静的プロパティにバインドすることはできません(INotifyPropertyChangedはインスタンスでのみ意味があります)ので、これで十分です...
{x:Static my:MyTestStaticClass.MyProperty}
または例
<TextBox Text="{x:Static my:MyTestStaticClass.MyProperty}" Width="500" Height="100" />
必ず含めてください-つまり、XAMLで次のようにnamespace
定義しますmy
xmlns:my="clr-namespace:MyNamespace"
編集:コードからのバインディング
(この部分にはいくつかの回答が混在しているため、展開するのが理にかなっていると思いました。1か所にまとめてください)
OneTime
バインディング:
あなたはただ使うことができますtextBlock.Text = MyStaticClass.Left
(それを配置する場所に注意してください、post-init)
TwoWay
(またはOneWayToSource
) バインディング:
Binding binding = new Binding();
//binding.Source = typeof(MyStaticClass);
// System.InvalidOperationException: 'Binding.StaticSource cannot be set while using Binding.Source.'
binding.Path = new PropertyPath(typeof(MyStaticClass).GetProperty(nameof(MyStaticClass.Left)));
binding.Mode = BindingMode.TwoWay;
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
this.SetBinding(Window.LeftProperty, binding);
...もちろん、コードから Binding を設定している場合は、XAML のバインディングをすべて削除します。
OneWay
(ソースからのプロパティの変更):
また、ソース プロパティの変更時にターゲット (つまり、この場合はコントロールのプロパティ、Window.Left) を更新する必要がある場合、それは静的クラスでは実現できません (上記の私のコメントによると、必要になるでしょう)。実装されているので、ラッパークラスを使用してINotifyPropertyChanged
実装し、それをINotifyPropertyChanged
関心のある静的プロパティに配線することができます(静的プロパティの変更を追跡する方法を知っている場合、つまり、これはこの時点からの「設計」の問題です。すべてを 1 つの「非静的」クラスに再設計して配置することをお勧めします)。