2012-06-12 52 views
0

我有一個WPF棱鏡應用程序與例如我想編輯幾個客戶。因此,例如,我爲5個客戶提供了5個選項卡。 每個客戶有5個子標籤,如設置,細節等WPF棱鏡只發送事件到活動標籤

當我加載客戶或更新它時,我想要發佈到每個子標籤的棱鏡事件得到更新。 唯一的問題是:其他子標籤將更新與同一個客戶,以及這不是該計劃:D

所以有可能只有活動標籤和那些viewmodels可以訂閱的事件,或像這樣?

感謝您的幫助!

回答

0

我做了這樣的事情而回

我不記得確切的細節,但訂閱事件的標籤,用一個LoadConsumerMessage,消息曾在除了通常的郵件屬性兩個額外的屬性:一Id字段和IsHandled字段。

如果我想要一個特定的選項卡來加載消費者,我會用我想要的選項卡的ID填充Id。例如,加載在當前選項卡的客戶我會使用

// Id was typically a Guid 
var event = new LoadConsumerEvent() { Id = this.Id; }; 

然後在處理該事件的訂戶,我會忽略該事件,如果沒有匹配

if (e.Id == Guid.Empty || e.Id == this.Id) 
{ 
    // Load Customer 
} 

如果我想只有第一個可用的選項卡來處理該事件,我設置IsHandled財產的第一用戶,而忽視了事件如果這是有史以來真正

if (e.IsHandled) 
    return; 

// Do processing 

e.IsHandled = true; 
+0

嘿,這將意味着發送該事件每次到每個標籤,然後德如果需要處理訂閱,請在訂閱所在的基類中進行處理。 這似乎不是一個令人滿意的解決方案:/ –

+0

@inxs我想我明白你在說什麼。是否有一個原因,爲什麼每個Tab不是它自己的ViewModel,該ViewModel包含對子選項卡ViewModels的引用?你甚至不需要這樣的事件 – Rachel

+0

我更喜歡封裝的tab-sub-tab結構的原因是它們不需要以任何方式將視圖引用到視圖模型,這使得它將一些屬性更改爲public等等。 我只是認爲用棱鏡事件做這件事會是一個「更平滑」的做法。 –