2013-12-17 98 views
1

我在視圖中聲明瞭一個自定義控件。該控件有自己的ViewModel,我在父視圖的XAML中聲明。我想通過綁定將值傳遞給此子ViewModel,但我沒有使用依賴屬性,寧願不要。有沒有辦法去解決這個問題?還是我需要大量的返工?將參數傳遞給自定義控件ViewModel,MVVM

宣言子視圖模型包括綁定不起作用:

<Window.Resources> 
    <uc:PagerViewModel x:Key="PagerDataContext" PagesContent="{Binding DisplayedRawData}"> 
    </uc:PagerViewModel> 
<Window.Resources> 

宣言自定義控件:

<uc:Pager Grid.Row="1" DataContext="{StaticResource PagerDataContext }"/> 

子視圖模型relivent代碼:

public string PagesContent 
    { 
     get 
     { 
      return _pagesContent; 
     } 
     set 
     { 
      _pagesContent = value; 
      OnPropertyChanged("PagesContent"); 
     } 
    } 
    private string _pagesContent = string.Empty; 
+0

我知道如何去做,但沒有使用資源。這是當你設置你的控件DataContext ViewModel,然後做一個綁定relativesource。 :) –

+0

當然,這可以工作。我確實很喜歡將我的ViewModel聲明爲xaml資源的想法。如果我無法想出一個不同的解決方案,那可能是我會做的。 – CThin

+0

嗯,我實際上使用Caliburn.Micro庫來連接我的ViewModels到控件而不是使用Resources。 TBH,除了在CollectionViewSource中使用它之外,我沒有看到它的好處。 –

回答

0

任何約束力目標必須是依賴項屬性 - 您無法綁定視圖模型屬性。一種替代的方法,根據您提出的東西,是對視圖創建一個依賴屬性,然後把它傳遞到視圖模型那樣:

<Window.Resources> 
    <uc:PagerViewModel x:Key="PagerDataContext" /> 
<Window.Resources> 

所以,在uc:Pager控件中聲明依賴項屬性DisplayedRawData;在其PropertyChangedEventHandler內部,將新值傳遞給視圖模型:

((PagerViewModel)DataContext).PagesContent = DisplayedRawData 
相關問題