Widzę dwa sposoby na podłączenie ViewModel do widoku. Jedną z nich jest XAML, a druga wtrysk zależności w kodzie.Podłączanie ViewModel do widoku w Silverlight
Która metoda jest bardziej zalecana? Wolę metodę xaml, ponieważ nie chcę żadnego kodu w kodzie, ale czy są jakieś problemy z jednym z drugim?
<navigation:Page x:Class="MyNamespace.MyViewModel"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ViewModel="clr-namespace:MyNameSpace.MyViewModel"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
Title="ViewModel Page" >
<navigation:Page.Resources>
<ViewModel:MyViewModel x:Key="ViewModel"></ViewModel:MyViewModel>
</navigation:Page.Resources>
<Grid x:Name="LayoutRoot" Background="White"
DataContext="{StaticResource ViewModel}">
</Grid>
</navigation:Page>
LUB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;
namespace MyNamespace
{
public partial class MyView : Page
{
public MyView()
{
InitializeComponent(MyViewModel viewModel);
this.DataContext = viewModel;
}
}
}
Hmm .. dzięki za link. Teraz to czytam. Myślę, że muszę to przeczytać jeszcze kilka razy, ponieważ nic nie dostaję. Shawn mówi: "W obu tych metodach nie podoba mi się lepkość widoku do modelu widoku. Oba te podejścia implikują relację jeden-do-jednego, która, mimo że jest to powszechny przypadek, nie zawsze ma miejsce . " ale z View-First wiele widoków może być databound do jednej maszyny wirtualnej. Czy widok może być powiązany z więcej niż jedną maszyną wirtualną? hmmm .. znowu, domyślam się, że jeśli twój V był prostą siatką, mógł chcieć mieć to związane z różnymi maszynami wirtualnymi. –
Do tej pory jestem fanem utrzymywania relacji jeden-do-jednego między Vs a maszynami wirtualnymi. Co nie znaczy, że jestem przeciwko hierarchii. Oznacza to, że widok może zawierać podprzestrzennie każdy z jego własną maszyną wirtualną, a to wydaje się działać całkiem dobrze. –
W naszej aplikacji mamy standardowy widok siatki, który wyświetla tylko wiersze danych. Dane mogą pochodzić z różnych ViewModels, więc trzymanie go jeden na jeden nie ma dla nas sensu. Nie ma sensu posiadanie wielu widoków siatki, gdy wszystkie są takie same, z wyjątkiem zawartych w nich danych. –