The application is developed with C# and WPF. I have a data binding to a static property of a non static class. When the application is started, the binding does well, but if i change the bool of the binding, the view is not been updated. How can i update the binding of this static property ? NotifyChanged-Events don't affected.
The class:
public class ViewTemplateManager : NotifyBase
{
public static bool CanResizeColumns { get; set; }
static ViewTemplateManager()
{
CanResizeColumns = true;
}
The View:
<Thumb x:Name="PART_HeaderGripper" IsEnabled="{Binding Source={x:Static Member=viewManager:ViewTemplateManager.CanResizeColumns}}"
The only way to do this is if you have a reference to the associated BindingExpression.
Assuming you have a reference to the Thumb in your code, it would look like:
var bindingExpression = thumb.GetBindingExpression(Thumb.IsEnabledProperty);
if (bindingExpression != null)
bindingExpression.UpdateTarget();
Your best bet would be to use a singleton pattern, like so:
public class ViewTemplateManager : NotifyBase
{
public bool CanResizeColumns { get; set; }
public static ViewTemplateManager Instance { get; private set; }
static ViewTemplateManager()
{
Instance = new ViewTemplateManager();
}
private ViewTemplateManager()
{
CanResizeColumns = true;
}
}
Then bind like so:
<Thumb x:Name="PART_HeaderGripper" IsEnabled="{Binding Source={x:Static viewManager:ViewTemplateManager.Instance}, Path=CanResizeColumns}}"
Then you simply need to raise the INotifyPropertyChanged.PropertyChanged event when you change CanResizeColumns.
Unfortunately, there is no direct equivalent to the notification mechanism of INotifyPropertyChanged
for a static property.
There are a couple of options, including:
PropertyChanged
event. This can get ugly and introduce memory leaks if you're not careful about unsubscribing or using a Weak Event pattern.PropertyChanged
events as normal.You can either implement the properties using a Singleton on which the property is not static or you just also make it non-static but you just create one instance in the App
instance for example (i would go with the latter). In either case you can implement INotifyPropertyChanged
again.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With