WPF: Получить родительское свойство в Child ViewModel - PullRequest
0 голосов
/ 04 марта 2020

Я бы хотел свернуть приложение, нажав кнопку UserControl с помощью MVVM.

Вот мой класс ViewModel:

public class HeaderViewModel : ViewModelBase, IHeaderViewModel
{
    public DelegateCommand MinimizeWindowCommand { get; set; }
    public HeaderViewModel(IHeaderView view) : base(view)
    {
        MinimizeWindowCommand = new DelegateCommand(OnMinimizeWindow);
    }
    private void OnMinimizeWindow()
    {
        /*
         * This is where I would like to minimize my Application
         * Something like MainWindow
         */
    }
}

Когда я нажимаю на моя кнопка UserControl, вызывается MinimizeWindowCommand. В методе OnMinimize () я бы sh установил видимость MainWindow в Hidden.

Кстати, я использую Prism , а UserControl напрямую вводится в MainWindow следующим образом:

<Window
    xmlns:prism="http://prismlibrary.com/"
    [...]
    Title="Shell"
    x:Name="Shell">
    <ScrollViewer>
        <StackPanel>
            <ContentControl prism:RegionManager.RegionName="{x:Static infra:RegionNames.HeaderRegion}" />
        </StackPanel>
    </ScrollViewer>
</Window>

Спасибо! Chcoum

1 Ответ

0 голосов
/ 04 марта 2020

Я нашел решение и учел комментарии.

В Prism Framework вы можете использовать IEventAggregator для отправки сообщений между различными частями вашего приложения. Вот различные шаги с Prism.

Создайте класс, который содержит ссылку на ваше событие.

В этом файле создайте ссылку на ваше событие как класс .

namespace MyNameSpace
{
    public class ViewUpdatedEvent : PubSubEvent<bool> { }
}

Опубликовать sh это событие в ViewModel:

public class HeaderViewModel
{
    private IEventAggregator _eventAggregator;

    public DelegateCommand MinimizeWindowCommand { get; set; }

    public HeaderViewModel(IHeaderView view,IEventAggregator eventAggregator) : base(view)
    {
        _eventAggregator = eventAggregator;
        MinimizeWindowCommand = new DelegateCommand(OnMinimizeWindow);
    }

    private void OnMinimizeWindow()
    {
        _eventAggregator.GetEvent<ViewUpdatedEvent>().Publish(true);
    }
}

Я отправляю параметр "true", чтобы сказать, что я хочу уменьшить свой Окно.

Подписаться на это событие в коде представления:

public partial class Shell : Window
{
    public Shell(IEventAggregator eventAggregator)
    {
        InitializeComponent();
        eventAggregator.GetEvent<ViewUpdatedEvent>().Subscribe(OnMinimizeApp);
    }

    private void OnMinimizeApp(bool parameter)
    {
        if (parameter)
            this.Visibility = Visibility.Hidden;
    }
}

Вот и все. Я влюбился в Призму ^^. Надеюсь, что это поможет.

...