Solución:
En primer lugar, no te puedes unir variable
. Puedes unirte solo a properties
desde XAML. Para vincularse a la propiedad estática, puede hacerlo de esta manera (digamos que desea vincular Text
propiedad de TextBlock
) –
<TextBlock Text="{Binding Source={x:Static local:YourClassName.PropertyName}}"/>
dónde local
es el espacio de nombres donde reside su clase que debe declarar arriba en un archivo xaml como este –
xmlns:local="clr-namespace:YourNameSpace"
En realidad, no puede vincularse a una propiedad estática (INotifyPropertyChanged solo tiene sentido en instancias), por lo que esto debería ser suficiente …
{x:Static my:MyTestStaticClass.MyProperty}
o por ejemplo
<TextBox Text="{x:Static my:MyTestStaticClass.MyProperty}" Width="500" Height="100" />
asegúrese de incluir el namespace
– es decir, definir el my
en el XAML como xmlns:my="clr-namespace:MyNamespace"
EDITAR: enlace desde el código
(Hay algunas respuestas mixtas en esta parte, así que pensé que tenía sentido expandirlo, tenerlo en un solo lugar)
OneTime
vinculante:
Podrías usar textBlock.Text = MyStaticClass.Left
(solo tenga cuidado donde coloca eso, post-init)
TwoWay
(o OneWayToSource
) vinculante:
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);
… por supuesto, si está configurando Binding desde el código, elimine cualquier enlace en XAML.
OneWay
(propiedad cambia de la fuente):
Y si necesita actualizar el objetivo (es decir, la propiedad del control, Window.Left en este caso) en los cambios de propiedad de origen, eso no se puede lograr con la clase estática (según mi comentario anterior, necesitaría los INotifyPropertyChanged
implementado, por lo que podría usar una clase contenedora, implementar INotifyPropertyChanged
y conecte eso a una propiedad estática de su interés (siempre que sepa cómo rastrear los cambios de su propiedad estática, es decir, esto es más un problema de ‘diseño’ a partir de este punto, sugeriría rediseñarlo y ponerlo todo dentro de uno ‘no -clase estática ‘).
Puedes usar el más nuevo x:Bind
para hacer esto simplemente usando:
<TextBlock Text="{x:Bind YourClassName.PropertyName}"/>