2010-09-24 23 views
3

我是Silverlight(版本4)和MVVM的新手,我似乎無法弄清楚如何將XAML中的命令綁定到我的ViewModel以進行「Loaded」 UserControl的事件。我可以將命令綁定到像這樣的按鈕...在Silverlight中使用MVVM處理OnLoad(已加載)

<Button Command="{Binding ShowImageClick}" /> 

它工作正常。但我不知道如何做類似onload的事情。我試過這個,但它拋出了一個異常說「無法分配財產」...

<UserControl Loaded="{Binding WindowLoad}"> 

任何想法?

回答

0

不知道這是最好的做法或沒有,而只是具有視圖模型類的構造函數似乎工作不夠好,我...

namespace App.ViewModels 
{ 
    public class Main : INotifyPropertyChanged 
    { 

     public Main() 
     { 
      // Onload code here 
     } 
+0

@HiTech您是否熟悉MVVM?我的XAML的代碼隱藏是裸露的。 – 2010-09-24 22:58:49

+0

哎呀,我的錯。很快就會刪除評論,因爲不添加任何值。 – 2010-09-25 06:51:16

1

我是達米安答案的粉絲,並且通常會使用該解決方案。

另一種常見做法是InvokeCommandAction或Blend中的類似行爲。

+0

如果你是他的回答迷,你爲什麼不喜歡它?這就是這應該如何工作。 – 2010-09-28 15:20:59

+1

@Josh:沒錯。完成。 – 2010-09-28 22:24:09

2

CodePlex上,基於Expression Blend的樣本項目可能會有所幫助:

Expression Blend Samples

如:

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="Loaded"> 
     <si:InvokeDataCommand Command="{Binding Command}"/> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 
0

我才發現,可能會導致內存泄漏,並已恢復了老派加載。要檢查這一點,添加一個終結器到你的用戶控件/頁面,並確保它在你執行GC.Collect()時被調用。

0

也許這有助於它不是正確的方式,但它適用於我。

查看:

<UserControl Tag="{Binding InitializeMyUserControl}"> 

視圖模型:

public object InitializeMyUserControl 
{ 
    get 
    { 
     // do some initialization in here 
     // bla bla bla 
     .. 

     return null; 
    } 
} 

當用戶控件加載它會嘗試獲取標記值。在那裏你可以初始化事物。