簡體   English   中英

IList作為依賴項屬性,setter似乎不起作用

[英]IList as dependency property, setter does not seem to be working

我有以下來自ComboBox自定義用戶控件:

public class EnumSourceComboBox : ComboBox
{
    public static readonly DependencyProperty ExcludedItemsProperty =
        DependencyProperty.Register(
            "ExcludedItems", 
            typeof(IList), 
            typeof(EnumSourceComboBox), 
            new PropertyMetadata(
                new List<object>()));

    public EnumSourceComboBox()
    {
        this.ExcludedItems = new List<object>();
    }

    public IList ExcludedItems
    {
        get
        {
            return (IList)this.GetValue(EnumSourceComboBox.ExcludedItemsProperty);
        }

        set
        {
            this.SetValue(EnumSourceComboBox.ExcludedItemsProperty, value);
        }
    }
}

我在XAML使用它的方式如下:

        <controls:EnumSourceComboBox>
            <controls:EnumSourceComboBox.ExcludedItems>
                <employeeMasterData:TaxAtSourceCategory>FixedAmount</employeeMasterData:TaxAtSourceCategory>
                <employeeMasterData:TaxAtSourceCategory>FixedPercentage</employeeMasterData:TaxAtSourceCategory>
            </controls:EnumSourceComboBox.ExcludedItems>
        </controls:EnumSourceComboBox>

這樣可以構建良好,並且沒有XAML解析異常或類似的東西。 但是, ExcludedItems始終具有count == 0 ,因此XAML中定義的兩個項目不會添加到列表中。

如何定義依賴項屬性以支持此行為?

更新 :這是TaxAtSourceCategory枚舉:

public enum TaxAtSourceCategory
{
    /// <summary>
    /// The none.
    /// </summary>
    None, 

    /// <summary>
    /// The fixed amount.
    /// </summary>
    FixedAmount, 

    /// <summary>
    /// The fixed percentage.
    /// </summary>
    FixedPercentage, 

    // Has some more values, but I don't think that matters
}

@cguedel,

我嘗試了您的DependencyProperty代碼,它運行正常。 我在屬性的XAML內容中添加了兩個字符串,而不是在TaxAtSourceCategory實例中添加了兩個字符串。在窗口的Loaded事件中,我對列表2進行了計數。

因此,也許您與TaxAtSourceCategory類有關。 也許您可以顯示TaxAtSourceCategory代碼,檢查構造函數調用...

問候

在以下代碼中,有一個EnumSourceCombobox,用於跟蹤集合中的更改。
都跟蹤:
-集合更改(集合被另一個替換)
-並更改集合(添加/刪除/清除)

public class EnumSourceComboBox : ComboBox
{
    private ObservableCollection<TaxAtSourceCategory> previousCollection;

    public static readonly DependencyProperty ExcludedItemsProperty =
        DependencyProperty.Register(
            "ExcludedItems",
            typeof(ObservableCollection<TaxAtSourceCategory>),
            typeof(EnumSourceComboBox),
            new PropertyMetadata(null));
    public ObservableCollection<TaxAtSourceCategory> ExcludedItems
    {
        get
        {
            return (ObservableCollection<TaxAtSourceCategory>)this.GetValue(EnumSourceComboBox.ExcludedItemsProperty);
        }
        set
        {
            this.SetValue(EnumSourceComboBox.ExcludedItemsProperty, value);
        }
    }
    public EnumSourceComboBox()
    {
        DependencyPropertyDescriptor dpd = DependencyPropertyDescriptor.FromProperty(EnumSourceComboBox.ExcludedItemsProperty, typeof(EnumSourceComboBox));
        dpd.AddValueChanged(this, (o, e) =>
        {
            if (previousCollection != null)
                previousCollection.CollectionChanged -= ExcludedItemsChanged;
            previousCollection = ExcludedItems;
            if (previousCollection != null)
                previousCollection.CollectionChanged += ExcludedItemsChanged;
        });
        this.ExcludedItems = new ObservableCollection<TaxAtSourceCategory>();
    }
    void ExcludedItemsChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        // Take into account change in the excluded items more seriously !
        MessageBox.Show("CollectionChanged to count " + ExcludedItems.Count);
    }
}

這是解決方案的鏈接: http : //1drv.ms/1P8cMVc

最佳使用

暫無
暫無

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

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