Как мне привязать StackPanel к моей ViewModel?

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

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

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

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

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

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

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

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

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

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

КОД ПСЕВДО:

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

2 ответа

Решение

Во-первых, не надо. Вместо того, чтобы диктовать пользовательский интерфейс вашей виртуальной машины, вы должны диктовать данные (модель). Другими словами, тип свойства должен быть 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}"/>

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

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

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

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

Другие вопросы по тегам