MVVM ViewModel конструктор по умолчанию - PullRequest
2 голосов
/ 25 мая 2011

Я освоился с шаблоном MVVM в Silverlight, и мне было интересно, как реализовать привязку из View к ViewModel, когда конструктор ViewModel имеет параметр, если тип интерфейса.

Если я привяжу модель представления к представлению в XAML, вы не сможете использовать параметризованный конструктор. Учитывая, что я создавал конструктор по умолчанию, передавая экземпляр параметризованному конструктору, но это нарушает абстракцию.

View

<navigation:Page x:Class="QSmart.DataViewer.Report.RecentFailures.Report" 
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
           xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
           mc:Ignorable="d"
           xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
           xmlns:local="clr-namespace:QSmart.DataViewer.Report.RecentFailures"
           d:DesignWidth="640" d:DesignHeight="480"
           Title="Report Page" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation">
    <UserControl.Resources>
        <local:ReportViewModel x:Key="ViewModel"/>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" DataContext="{StaticResource ViewModel}" >
        <telerik:RadGridView Name="RadGridView1" ItemsSource="{Binding Path=Faults,Mode=OneWay}" AutoGenerateColumns="True" />
    </Grid>
</navigation:Page>

Просмотр модели

Public Sub New(ByVal serviceDataAgent As IRecentFailuresReportServiceAgent)
    If Not IsInDesignMode Then
        If serviceDataAgent IsNot Nothing Then
            ServiceAgent = serviceDataAgent
        End If
        Messenger.Default.Register(Of RecentFailuresMessage)(Me, Sub(m) ChangeReportSettings(m))
        LoadData()
    End If
End Sub

Какой способ обойти это? Рекомендуется ли использовать код позади представления для перехода в параметризованный конструктор и затем связывания с моделью представления?

1 Ответ

1 голос
/ 02 июня 2011

Вы можете использовать IoC-контейнер для создания ваших объектов, включая вид и модель представления. При этом контейнер будет пытаться удовлетворить все необходимые компоненты вашей моделью представления, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...