【问题标题】:WPF Dependency Property ObservableCollection showing multiple valuesWPF 依赖属性 ObservableCollection 显示多个值
【发布时间】:2017-04-13 10:22:49
【问题描述】:

我在 WPF 中有一个用户控件,当我在另一个窗口中使用用户控件时,我想将一个项目列表传递给它(用户控件包含一个 ComboBox 和标签,并具有一些重要的功能)。如果我的页面上有一个控件,这很好用,但如果我有两个,我会从两个用户控件中获得列出的值,大概是因为 DependencyProperty 是静态的。我无法删除静态,因为它在注册依赖属性时会引发错误。

public static readonly DependencyProperty ComboBoxValuesProperty =
    DependencyProperty.Register("ComboBoxValues", typeof(ObservableCollection<ComboBoxValue>), typeof(SystemConfigComboBox),
    new PropertyMetadata(new ObservableCollection<ComboBoxValue>()));

public ObservableCollection<ComboBoxValue> ComboBoxValues
{
    get { return GetValue(ComboBoxValuesProperty) as ObservableCollection<ComboBoxValue>; }
    set { SetValue(ComboBoxValuesProperty, value); }
}

下面显示了包含 Value1 和 Value2 的两个用户控件组合框

<customEditors:SystemConfigComboBox SystemConfigEntry="Entry1" ComboBoxLabel="Combo 1" ComboBoxWidth="300">
    <customEditors:SystemConfigComboBox.ComboBoxValues>
        <customEditors:ComboBoxValue DisplayValue="Value1" ActualValue="VALUE1" />
    </customEditors:SystemConfigComboBox.ComboBoxValues>
</customEditors:SystemConfigComboBox>
<customEditors:SystemConfigComboBox SystemConfigEntry="Entry2" ComboBoxLabel="Combo 2" ComboBoxWidth="300">
    <customEditors:SystemConfigComboBox.ComboBoxValues>
        <customEditors:ComboBoxValue DisplayValue="Value2" ActualValue="VALUE2" />
    </customEditors:SystemConfigComboBox.ComboBoxValues>
</customEditors:SystemConfigComboBox>

ComboBoxValue 类仅供参考:-

public class ComboBoxValue : FrameworkElement
{
    public static readonly DependencyProperty DisplayValueProperty =
        DependencyProperty.Register("DisplayValue", typeof(string), typeof(ComboBoxValue));

    public static readonly DependencyProperty ActualValueProperty =
        DependencyProperty.Register("ActualValue", typeof(string), typeof(ComboBoxValue));

    public string DisplayValue
    {
        get { return (string)GetValue(DisplayValueProperty); }
        set { SetValue(NameProperty, value); }
    }

    public string ActualValue
    {
        get { return (string)GetValue(ActualValueProperty); }
        set { SetValue(ActualValueProperty, value); }
    }

}

【问题讨论】:

    标签: c# wpf user-controls


    【解决方案1】:

    您应该在控件类的构造函数中初始化ObservableCollection,而不是在DependencyProperty.Register方法中:

    public class SystemConfigComboBox
    {
        public SystemConfigComboBox()
        {
            ComboBoxValues = new ObservableCollection<ComboBoxValue>();
        }
    
        public static readonly DependencyProperty ComboBoxValuesProperty =
                DependencyProperty.Register("ComboBoxValues", typeof(ObservableCollection<ComboBoxValue>), typeof(SystemConfigComboBox)));
    
        ...
    }
    

    有关此的更多信息,请参阅 MSDN:https://msdn.microsoft.com/en-us/library/aa970563(v=vs.110).aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      • 2011-07-22
      • 2014-05-23
      • 2015-11-26
      相关资源
      最近更新 更多