2011-09-08 76 views
0

我的要求是將自定義UserControl顯示爲彈出窗口。我試圖在Silverlight/MVVM中使用this方法來實現這一點。但我無法找到一種方法,可以將某些參數傳遞給彈出窗口。我通過this方法來實現它,但它不知何故無法正常工作。問題從XAML傳遞參數

這是我的XAML如何看起來像:

行爲到按鈕視圖1。這個按鈕的點擊,我打開一個彈出視圖2:

<cmds:PopupBehavior.CustomUI> 
<views:View2 CategoryID="{Binding CategoryID, Mode=TwoWay}"/> 
</cmds:PopupBehavior.CustomUI> 

類別ID是一個依賴屬性爲視圖2,並綁定到視圖1的視圖模型一個同名的屬性。但由於某些原因,即使在View1視圖模型中設置正確,我總是會將ViewID中的CategoryID設置爲0。

我哪裏錯了?

編輯:

這裏是視圖2依賴屬性代碼:

public static readonly DependencyProperty CategoryIDProperty = DependencyProperty.Register 
("CategoryID",typeof(int),typeof(View2),new PropertyMetadata(0)); 

public int CategoryID 
{ 
     get { return (int)GetValue(CategoryIDProperty); } 
     set { SetValue(CategoryIDProperty, value); } 
} 

的setter方法不會被調用的某些原因。

+0

請你也可以在這裏包含你的依賴屬性代碼。我假設你已經調試過並確保傳遞給你的dp參數(你的dp屬性中的SetValue的斷點)也是0? –

+0

我編輯帖子以包含DP代碼。並且setter永遠不會被調用,因此它採用DP註冊中提到的默認值。 – Vinod

+0

我能想到的下一步是你有一個綁定問題,我假設你已經查看了你的輸出窗口,以確保沒有綁定問題,並且你檢查了你的getter在視圖1的屬性上被調用? –

回答

0

這必須是第一視圖中的綁定問題,更改您的代碼下面的測試,看看它是否是:

cmds:PopupBehavior.CustomUI> 
    <views:View2 CategoryID="5"/> 
</cmds:PopupBehavior.CustomUI> 

如果你的DP的setter現在得到的所謂檢查你的輸出窗口,看看爲什麼它不能綁定

+0

正如我上面提到的,除了你自己的代碼之外,DP setter和getter不會被任何東西使用。 Silverlight直接使用SetValue和GetValue。 (這個例外是附加的依賴屬性,因爲它們具有在XAML解析期間被調用的靜態設置器)。 –

+0

@TBohnen:我嘗試設置XAML中的值。它仍然不會設置該屬性的值。我在DP註冊,DP獲取和設置,DP的Value Changed事件(根據HiTechMagic使用此事件)以及視圖的構造函數上放置斷點。 調試點轉到註冊,然後直接轉到構造函數。 setter永遠不會被調用:-( – Vinod

+0

setter只會在構造函數之後調用,但是我真的不知道,發生了一些奇怪的事情。我建議嘗試重新創建一個小示例應用程序,看它是否同樣的東西! –