簡體   English   中英

附加的屬性回調不適用於WPF VS2012中的默認值

[英]Attached property call back doesn't work with default value in wpf VS2012

我正在嘗試為組合框編寫一個簡單的附加屬性,該屬性通過回調更改組合框的數據源。我的問題是,回調函數對defualt值無效,這是我的代碼

附屬財產階級

namespace WpfApplication2
{
    public enum Types { Employee, Position, Task }
    public class ComboBoxAttached:DependencyObject
    {
        public static readonly DependencyProperty TypeOfProperty =
            DependencyProperty.RegisterAttached(
                "TypeOf", 
                typeof(Types), 
                typeof(ComboBoxAttached), 
                new PropertyMetadata(Types.Position, OnTypesChanged));  

        public static void SetTypeOf(DependencyObject d, Types use)
        {
            d.SetValue(TypeOfProperty, use);
        }

        private static void OnTypesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            ComboBox cb = d as ComboBox;

            // MessageBox.Show(((Types)e.NewValue).ToString());
            switch ((Types) e.NewValue)
            {
                case Types.Employee:
                    cb.ItemsSource = SourceData.Employee;
                    break;
                case Types.Position:
                    cb.ItemsSource = SourceData.Position;
                    break;
                case Types.Task:
                    cb.ItemsSource = SourceData.Task;
                    break;
            }
        }
    }
 }

數據源類別

namespace WpfApplication2
{
    public static class SourceData
    {
        public static List<string> Employee=new List<string>(){ "Manager","HR","CEO","CFO"};
        public static List<string> Position = new List<string>() { "Right", "Left", "Forward", "Backward" };
        public static List<string> Task = new List<string>() { "Assessment", "Measurement", "Consult", "Other" };  
    }
}

XAML

<ComboBox MyProp:ComboBoxAttached.TypeOf="Position" Margin="5" />

僅在屬性實際更改時才調用回調。 最初,它具有默認值,並且根據設計,該回調將不會被調用。 這樣您要么需要手動調用它,要么可以使用Types?的屬性Types? (使其變為可為空)手將默認值設為null

public static readonly DependencyProperty TypeOfProperty =
            DependencyProperty.RegisterAttached(
                "TypeOf", 
                typeof(Types?), 
                typeof(ComboBoxAttached), 
                new PropertyMetadata(null, OnTypesChanged)); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM