簡體   English   中英

在C#中,如何從ViewModel的視圖上設置DataContext?

[英]In C#, how can I set DataContext on a View from the ViewModel?

我正在嘗試把頭放在MVVM上。我了解很多,但是卻很難把握一個方面: 設置DataContext

我想顯示帶有特定對象的視圖。 用戶無法決定可見的內容,因此我需要在代碼中創建視圖。 然后,我想將視圖的DataContext設置為一個對象(用於綁定)。 我試圖不為此在視圖中放置代碼,但是View.LayoutRoot.DataContext是不公開的。

我想念什么?

試圖避免這種情況:

public class View
{
    public View(object dataContext)
    {
        InitializeComponent();
        LayoutRoot.DataContext = dataContext;  
    }
}

像這樣:

public class ViewModel
{
    ...

    public UIElement GetView()
    {
        UIElement *element = new View();
        element.LayoutRoot.DataContext = element;
        return element;
    }
}

不要忘記View應該了解ViewModel,而不是相反。

因此,在您的情況下,將代碼放入ViewModel中以創建視圖並不是最好的方法。

Josh Smith在MVVM上的文章中有一介紹如何將View應用於ViewModel。 他建議使用WPF的DataTemplates在XAML中選擇視圖。

如果使用XAML控件或Window(如果使用MVVM,則應該是這種情況),則LayoutRoot(默認為Grid)是公共的。 在您的示例中,您僅對View使用普通類,因此很難說出正在發生什么。

同樣,我支持卡梅倫的觀點-View或ModelView都不應該處理分配DataContext的問題。 它可以通過不同的方式來完成(DataTemplate,依賴項注入,特殊的構建器類,普通代碼),但是通常它發生在應用程序級別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM