2016-02-13 50 views
0

我有以下幾點: - 類AccountViewModel:BaseViewModel - AccountView.xaml如何正確傳遞模型視圖和視圖之間的參數DataContext的

我掙扎傳遞參數給模型視圖。

在主窗口

,我將它們綁定在一起:

<DataTemplate DataType="{x:Type local:AccountViewModel}"> 
    <local:AccountView /> 
</DataTemplate> 

在mainWindowViewModel,我有一個動作做顯示的客戶視圖:

ChangeViewModel(new AccountViewModel(new DateTime(2016, 2, 06), new DateTime(2016, 2, 15))) 

正如你所看到的, AccountViewModel爲其構造函數使用2個參數,2個Datetime。

然後在AccountView,我嘗試做創建的DataContext:

<UserControl.DataContext> 
    <ObjectDataProvider ObjectType="local:AccountViewModel" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
     <ObjectDataProvider.ConstructorParameters> 
      <sys:DateTime></sys:DateTime> 
      <sys:DateTime></sys:DateTime> 
     </ObjectDataProvider.ConstructorParameters> 
    </ObjectDataProvider> 
</UserControl.DataContext> 

無論我做什麼,它會創建AccountViewModel的另一個實例。我不希望這樣,我希望這個AccountView繼續使用我在上面顯示的命令中創建的AccountViewModel,但我也想使用綁定功能。如果可能,我寧願儘量避免使用代碼。

我怎樣才能做到這一點?

回答

1

您不需要在ViewModel上創建額外的對象。當您的View由您的DataTemplateDataType定義時。它會自動傳遞給你的視圖。

See this answer to understand DataContext here

View刪除你的下面的代碼,並檢查DataContext,這將是local:AccountViewModel:的東西,並不需要固定

<UserControl.DataContext> 
<ObjectDataProvider ObjectType="local:AccountViewModel" 
xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
    <ObjectDataProvider.ConstructorParameters> 
     <sys:DateTime></sys:DateTime> 
     <sys:DateTime></sys:DateTime> 
    </ObjectDataProvider.ConstructorParameters> 
</ObjectDataProvider> 

+1

我竟然浪費時間.. 。 非常感謝! – dyesdyes

+0

@dyesdyes你的歡迎:) –

相關問題