Как мне привязать StackPanel к моей ViewModel? - PullRequest
5 голосов
/ 08 июня 2009

На мой взгляд, у меня есть это:

<TextBlock Text="{Binding Title}"/>

, которое связывается со свойством Title моего ViewModel, а это просто и хорошо работает :

private string _title;
public string Title
{
    get
    {
        return _title;
    }

    set
    {
        _title = value;
        OnPropertyChanged("Title");
    }
}

Однако мой ViewModel также имеет свойство «FormFields» , которое представляет собой StackPanel, которое содержит ряд других элементов управления пользователя:

private StackPanel _formFields;
public StackPanel FormFields
{
    get
    {
        return _formFields;
    }

    set
    {
        _formFields = value;
        OnPropertyChanged("FormFields");
    }
}

Как мне связать это с моей точки зрения?

В ASP.NET был элемент PlaceHolder , я ищу что-то с той же функциональностью, например,

КОД PSEUDO:

<PlaceHolder Content="{Binding FormFields}"/>

Ответы [ 2 ]

18 голосов
/ 08 июня 2009

Во-первых, не надо. Вместо того, чтобы диктовать пользовательский интерфейс вашей виртуальной машины, вы должны диктовать данные (модель). Другими словами, тип свойства должен быть ObservableCollection<FormField>. Тогда ваша точка зрения будет привязана следующим образом:

<ItemsControl ItemsSource="{Binding FormFields}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

Это обычно определяется в разделе .Resources родительского элемента. Т.е. Window.Resources или WrapPanel.Resources.

Сказав это, вы можете использовать ContentPresenter, чтобы захватить StackPanel и вставить его в визуальное дерево:

<ContentPresenter Content="{Binding FormFields}"/>
0 голосов
/ 08 июня 2009

Вы пытались использовать Border или просто Grid?

<Border Content="{Binding FormFields}" />

Тем не менее, я ставлю под сомнение дизайн. Поля формы должны находиться в представлении, а представление должно быть указано в шаблоне данных, который создается в зависимости от типа модели представления. Я бы лично не делал то, что вы делаете в коде.

Приветствие.

...