Пользовательский провод Silverlight MVVM управляет моделями просмотра - PullRequest
3 голосов
/ 10 июля 2011

Я в растерянности из-за чего-то невероятно простого. Я искал, но смог найти точный ответ, который мне был нужен.

Проблема заключается в следующем.

Я учу себя серебряному свету MVVM. В настоящее время я пишу приложение, которое использует 1 главную страницу и 2 пользовательских элемента управления.

Как вы можете себе представить, 3 модели просмотра.

В настоящее время в моем XAML:

MainPage.xaml

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"
xmlns:vm="clr-namespace:newFileupload.ViewModel"
xmlns:vw="clr-namespace:newFileupload.View"

<UserControl.DataContext>
    <vm:MainPageViewModel />
</UserControl.DataContext>

<Grid x:Name="LayoutRoot" Background="White">
    <vw:PicturesOverviewView />
</Grid>

PicturesOverviewView.xaml

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"

<Grid x:Name="LayoutRoot" Background="White">

</Grid>

Итак, в mainpage.xaml я установил datacontext в xaml, затем я вызываю usercontrol в сетке так:

<vw:PicturesOverviewView />

Это дает мне следующую ошибку:

Error   1   Cannot create an instance of "PicturesOverviewView".    C:\Programming\C#\newFileUpload\newFileupload\MainPage.xaml 16  9   newFileupload

Я понятия не имею, что является причиной этого, а во-вторых ..

Как связать модели представлений с соответствующим пользовательским контролем?

Нужно ли объявлять пространство имен представлений для каждого элемента управления пользователя, а затем устанавливать его текст данных как главную страницу?

Спасибо, что нашли время, чтобы прочитать, и я надеюсь, что смогу продолжить в ближайшее время:)

1 Ответ

3 голосов
/ 10 июля 2011

Если приведенный код верен, вы пытаетесь создать элемент управления PicturesOverviewView внутри элемента управления PicturesOverviewView.Это будет причиной ошибки компиляции.(Хотя я предполагаю, что вы дважды вырезали и вставляли один и тот же Xaml).

Привязка: вы хотите привязать дочерние элементы управления к свойствам в главном представлении Model, которые сами являются моделями представления

Например,

namespace newFileupload.ViewModel
{
    public class MainPageViewModel
    {
        public ChildViewModel1 ChildViewModel1 { get; set; }
        public ChildViewModel2 ChildViewModel2 { get; set; }

        public MainPageViewModel()
        {
            this.ChildViewModel1 = new ChildViewModel1() { SomeProperty = "hello"};
            this.ChildViewModel2 = new ChildViewModel2() { SomeProperty = "there" };
        }
    }
}

Затем MainPage связывается следующим образом:

<Grid x:Name="LayoutRoot" Background="White">
    <vw:PicturesOverviewView DataContext="{Binding Path=ChildViewModel1}" />
    <vw:PicturesOverviewView DataContext="{Binding Path=ChildViewModel2}" />
</Grid>

Что-то где-то нужно для создания моделей представления с правильными данными.Имеет смысл повесить дочерние элементы от родительской модели представления.

Я бы посоветовал вам взглянуть на использование IOC-инъекции (например, на Unity), поскольку кажется, что вы можете просто захотеть создавать синглтоны, на которые ссылаются на разных уровнях.Проблема в том, где вы хотите обеспечить повторное использование, как будто вы жестко привязываете контексты данных в дочерних представлениях, и вы не можете их повторно использовать.

...