Обходной путь свойства зависимости WPF - PullRequest
2 голосов
/ 18 мая 2011

В MainWindow есть 3 пользовательских элемента управления. Каждый элемент управления имеет свою собственную кнопку Сохранить. Главное окно имеет кнопку SaveAll.

MainWindow имеет ContentControl, а свойство content привязано к виртуальной машине. Во время выполнения на ButtonClickCommand экземпляр создается и присваивается свойству содержимого.

Эта кнопка SaveAll будет вызывать методы, связанные с кнопкой Сохранить UserControls. Таким образом, у SaveAll нет собственного метода.

Это должно быть реализовано DependencyProperty.

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

Я не могу понять, какова была логика этого, но это очень полезная вещь.

Теперь я должен реализовать это, но я упускаю небольшую вещь, я не знаю.

Надеюсь, сценарий ясен.

Пожалуйста, помогите мне в этом сценарии с кодом.

Спасибо, VJ

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Поскольку вы упомянули MVVM, вот что вы, возможно, искали.Имейте в виду, это будет намного чище и проще, если вы используете MVVM-фреймворк, такой как Caliburn, но для этого примера это просто ванильный MVVM:

public class MainViewModel
{
    public MainViewModel()
    {
        ViewOneModel = new SubViewModel();
        ViewTwoModel = new SubViewModel();
        Children = new List<SubViewModel>(new[] { ViewOneModel, ViewTwoModel });
    }

    public void SaveAll()
    {
        foreach(var child in Children)
        {
            child.Save();
        }
    }

    public IList<SubViewModel> Children { get; private set; }

    public SubViewModel ViewOneModel { get; set; }
    public SubViewModel ViewTwoModel { get; set; }
}

public class SubViewModel
{
    public void Save()
    {
    }
}

и в пользовательском интерфейсе у вас в основном есть подпредставления (UserControls) в основном виде:

<StackPanel>
    <Button Width="100" Height="20" Content="Save All" />

    <local:ViewOne DataContext="{Binding ViewOneModel}" />

    <local:ViewTwo DataContext="{Binding ViewTwoModel}" />
</StackPanel>

Вам просто нужно привязать методы сохранения к вашим кнопкам с помощью интерфейса ICommand (предпочтительно экземпляра RelayCommand).

0 голосов
/ 18 мая 2011

Имхо в этом сценарии нет необходимости в RoutedEvents. Как бы я решил это: Существует Main-ViewModel, которая предоставляет 3 свойства с Sub-ViewModel. MainViewModel - это Datacontext для окна, а подвидомодели привязаны к datacontext из 3 пользовательских элементов управления.

Sub vm ​​выставляют свойство с помощью команды Save. Эта команда привязана к кнопкам сохранения в пользовательских элементах управления. Основной vm предоставляет свойство с помощью команды saveall, которая связана с кнопкой SaveAll. Затем в обработчике команды save all вы перебираете подчиненные виртуальные машины и вызываете для них команду save.

...