Привязка WPF MVVM x: имя не запускает метод - PullRequest
0 голосов
/ 10 июля 2020

Я новичок в WPF, начал пытаться изучить его в среду. Я начал изучать Caliburn.Micro и MVVM, и я использовал пакет Nuget MaterialDesignInXAML для материального дизайна в приложении. На основе этого я создал базовое приложение c, которое хочу использовать. В этом приложении есть выдвигающееся сбоку меню ящика. В этом меню у меня есть несколько кнопок. Я хочу иметь возможность нажимать эти кнопки и получать обновление ContentControl с соответствующими представлениями UserControl, которые я создал. У меня есть LoadHome() в методе publi c ShellViewModel(){LoadHome();}, и он загружается, когда я запускаю приложение, однако нажатие кнопок в меню не обновляет элемент управления контентом и не вызывает никаких точек останова, даже если он использует тот же синтаксис x:Name="", который используют другие. Если я уберу кнопки из меню и помещу их после, нажатие кнопки будет работать должным образом и обновит элемент управления содержимым.

Мой код

ShellView.XAML

 <DockPanel>
                           <Button x:Name="LoadHome"
                            Margin="4" HorizontalAlignment="Center"
                            Style="{DynamicResource MaterialDesignFlatButton}">
                        HOME
                    </Button>
                    <Button x:Name="LoadBlobPurge"
                            Margin="4" HorizontalAlignment="Center"
                            Style="{DynamicResource MaterialDesignFlatButton}"
                            materialDesign:RippleAssist.Feedback="{Binding RelativeSource={RelativeSource 
    Self}, Path=Foreground, Converter={StaticResource BrushRoundConverter}}"
    >
                        BLOB PURGE TOOL
                    </Button>
                    <Button Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
                            Margin="4" HorizontalAlignment="Center"
                            Style="{DynamicResource MaterialDesignFlatButton}">
                        APP 2
                    </Button>
                    <Button Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
                            Margin="4" HorizontalAlignment="Center"
                            Style="{DynamicResource MaterialDesignFlatButton}">
                        APP 3
                    </Button>
                    <Button Command="{x:Static materialDesign:DrawerHost.CloseDrawerCommand}"
                            Margin="4" HorizontalAlignment="Center"
                            Style="{DynamicResource MaterialDesignFlatButton}">
                        CLOSE
                    </Button>
                    <Button x:Name="LoadHowTo"
                            Margin="4" HorizontalAlignment="Center"
                            Style="{DynamicResource MaterialDesignFlatButton}">
                        <materialDesign:PackIcon Kind="About" />
                    </Button>
                    
**ShellViewModel.cs**

        public class ShellViewModel : Conductor<object>
    {
        public ShellViewModel()
        {
            LoadHome();
        }

        public void LoadHome()
        {
            ActivateItem(new HomeViewModel());
        }

        public void LoadBlobPurge()
        {
            ActivateItem(new BlobPurgeViewModel());
        }

        public void LoadHowTo()
        {
            ActivateItem(new HowToViewModel());
        }

        public void LoadApp2()
        {
            
        }

        public void LoadApp3()
        {
            
        }

    }

1 Ответ

1 голос
/ 10 июля 2020

Поскольку вы используете Caliburn.Micro, вы можете попробовать использовать следующий синтаксис для кнопки. x: Привязка имени также не удалась мне при использовании MaterialDesignInXAML.

<Button cal:Message.Attach="[Event Click] = [Action LoadBlobPurge()]"
                    Margin="4" HorizontalAlignment="Center"
                        Style="{DynamicResource MaterialDesignFlatButton}"
                        materialDesign:RippleAssist.Feedback="{Binding RelativeSource= 
   {RelativeSource Self}, Path=Foreground, Converter={StaticResource BrushRoundConverter}}">                       
LOAD BLOB PURGE </Button>

Я нашел более подробный ответ по этому поводу здесь:

Функция Caliburn Micro void не может быть срабатывает внутри DialogHost

...