更新静态属性的绑定

Gep*_*pro 6 wpf binding static

该应用程序是使用C#和WPF开发的.我有一个数据绑定到非静态类的静态属性.启动应用程序时,绑定运行良好,但如果我更改了绑定的bool,则视图未更新.如何更新此静态属性的绑定?NotifyChanged-Events不受影响.

班级:

public class ViewTemplateManager : NotifyBase
{
    public static bool CanResizeColumns { get; set; }

    static ViewTemplateManager()
    {
        CanResizeColumns = true;
    }
Run Code Online (Sandbox Code Playgroud)

风景:

<Thumb x:Name="PART_HeaderGripper" IsEnabled="{Binding Source={x:Static Member=viewManager:ViewTemplateManager.CanResizeColumns}}"
Run Code Online (Sandbox Code Playgroud)

Cod*_*ked 7

执行此操作的唯一方法是,如果您对相关的BindingExpression有引用.

假设您在代码中引用了Thumb,它看起来像:

var bindingExpression = thumb.GetBindingExpression(Thumb.IsEnabledProperty);
if (bindingExpression != null)
    bindingExpression.UpdateTarget();
Run Code Online (Sandbox Code Playgroud)

你最好的选择是使用单例模式,如下所示:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后像这样绑定:

<Thumb x:Name="PART_HeaderGripper" IsEnabled="{Binding Source={x:Static viewManager:ViewTemplateManager.Instance}, Path=CanResizeColumns}}"
Run Code Online (Sandbox Code Playgroud)

然后,您只需在更改CanResizeColumns时引发INotifyPropertyChanged.PropertyChanged事件.