簡體   English   中英

Silverlight 2:在動態創建的對象上INotifyPropertyChanged?

[英]Silverlight 2: INotifyPropertyChanged on dynamically created object?

這與我之前問過的一個問題是相同的,但我曾問過它是關於普通C#的。 這是Silverlight 2,我沒有ICustomTypeDescriptor

所以這又是一個問題:

我有幾個開關面板(適合那些喜歡類比的開關面板)。 這些開關面板中的每一個都具有名稱(字符串)可以處於打開或關閉狀態(布爾)的開關。 配電盤和開關是在其上具有INotify接口的對象。

使用開關名稱,我創建了集合中所有可能的開關名稱的列表,並創建了一個具有所有這些名稱作為屬性的動態類。

SwitchPanel1 (Switches( Switch1 ("Main",On) , Switch2("Slave",Off)))
SwitchPanel2 (Switches( Switch1 ("Bilge",On) , Switch2("Main",Off)))

產生一個集合

(Main,Bilge,Slave)

並生成具有以下屬性的動態類:

SwitchPanel : (SwitchPanel)
Main : (Switch)
Bilge : (Switch)
Slave: (Switch)

這樣的想法是,如果開關面板上有一個帶有“名稱”屬性的開關,則將其放置在該屬性上。 所以用一點linq

propeties["Main"].SetValue(newSwitchType,SwitchPanel.Switches.FirstOrDefault(sw => sw.Name == "Main"));

我想將此新動態類強制轉換為INotfyPropertyChanged並捕獲這些新屬性的實際更改,因此,如果開關更改狀態,則動態對象將報告它。

為什么? 它需要顯示在列表視圖中,而我正在使用的列表視圖通過提供屬性名稱而不是綁定路徑來進行綁定。

它還嘗試通過將對象強制轉換為INotifyPropertyChanged來捕獲INotify事件。 這意味着它將在事物發生變化時進行排序和/或分組。

您可以創建實現INotifyPropertyChanged的字符串bool的派生泛型字典。 索引器如下所示:

public new bool this[string key]
{
    get
    {
        if( this.ContainsKey(key))
           return base[key];
        return default(bool);
    }
    set
    {
        base[key] = value;
        OnPropertyChanged(key.ToString());
    }
}

開關面板中的使用自定義IValueConverter將開關綁定到字典:

http://silverlight.net/forums/t/51864.aspx

這樣,您仍然可以擁有一個動態的Names集合,每個Names都有一個關聯的bool值,並直接綁定到數據而無需創建動態類型。

暫無
暫無

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

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