繁体   English   中英

自定义UserControl“IsEnabled”数据绑定无法正常工作

[英]Custom UserControl “IsEnabled” data binding not working

我的WPF应用程序现在有一个很糟糕的问题......

我有一个自定义UserControl用于编辑组件的详细信息。 它应该从未启用开始,并在用户选择要编辑的组件后立即启用。

问题是:IsEnabled属性甚至没有改变。

这是我的代码:

<my:UcComponentEditor Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  
                        IsEnabled="{Binding EditorEnabled}"
                              DataContext="{Binding VmComponent}" />

EditorEnabled是我的ViewModel(VmComponent)中的一个属性,默认情况下为false,当用户选择一个组件或创建一个组件时,该属性变为true

只是为了记录,在我的ViewModel中:

private Boolean _editorEnabled = false;

    public Boolean EditorEnabled
    {
        get { return _editorEnabled; }
        set 
        {
            _editorEnabled = value;
            OnPropertyChanged("EditorEnabled");
        }
    }

当我尝试启动我的应用程序时,UserControl正在启动...已启用。 我到处都添加了断点,从一开始,EditorEnabled就是假的。

我也做了一个非常愚蠢的事情来试图弄清楚发生了什么:我创建了一个转换器(非常有用 - 将布尔值转换为布尔值 - 呃),在它上面放置一个断点,然后......代码永远不会到达。

<my:UcComponentEditor Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"  
                        IsEnabled="{Binding EditorEnabled, Converter={StaticResource BoolConverter}}"
                              DataContext="{Binding VmComponent}" />

这可能意味着永远不会设置属性isEnabled,因为永远不会到达转换器。

你看到那里有什么问题吗? 大约一周前我开始在WPF工作,因此我可能错过了必要的东西......

非常感谢您的宝贵时间 :-)

您应该为绑定添加DependencyProperty以使其正常工作。 浏览此处获取更多信息。

代码隐藏:

public static readonly DependencyProperty EditorEnabledDependencyProperty = DependencyProperty.Register("EditorEnabled", typeof(bool), typeof(UcComponentEditor), new PropertyMetadata(false));

public bool EditorEnabled
{
    get { return (bool)base.GetValue(UcComponentEditor.EditorEnabledDependencyProperty); }
    set { base.SetValue(UcComponentEditor.EditorEnabledDependencyProperty, value); }
}

我认为问题是用户控件的DataContext属性存在绑定。 这意味着EditorEnabled属性应该是VmComponent对象中的属性。 至少这就是我的问题所在。

为了解决这个问题,我为IsEnabled的绑定指定了一个合适的来源。 一旦我这样做,控制开始按预期工作。

希望有所帮助。

将控件封装在DockPanel中(例如)将不再需要DependencyProperty。

然后,您可以简单地使用dockpanel而不是自定义控件进行绑定。 在Dockpanel上设置绑定到IsEnabled的变量将自动启用或禁用Dockpanel中包含的项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM