WPF MVVM Binding x:Name 不触发方法

Posted

技术标签:

【中文标题】WPF MVVM Binding x:Name 不触发方法【英文标题】:WPF MVVM Binding x:Name not triggering method 【发布时间】:2020-10-31 08:04:51 【问题描述】:

我是 WPF 新手,周三开始尝试学习它。我已经开始研究 Caliburn.Micro 和 MVVM,并且我已经使用 MaterialDesignInXAML Nuget 包在应用程序中进行材料设计。由此我创建了一个我想使用的基本应用程序。这个应用程序有从侧面滑出的抽屉菜单。在这个菜单上,我有许多按钮。我希望能够单击这些按钮并使用我创建的相关 UserControl 视图更新我的 ContentControl。我在公共LoadHome() 中有ShellViewModel()LoadHome(); 方法,当我启动应用程序时它会加载,但是单击菜单中的按钮不会更新内容控件,也不会触发任何断点,即使它使用相同的@987654326 @ 其他人使用的语法。如果我将按钮从菜单中取出并将它们放在之后,按钮单击将按预期工作并更新内容控件。

我的代码

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()
        
            
        

    

【问题讨论】:

按钮集的命令在哪里?请注意,人们使 MVVM 成为一件事……因为人们可以自己滚动而不需要其他工具。我在我的博客Xaml: MVVM Example for Easier Binding 上提供了一个示例。话虽如此,您可能在这个问题上发生的事情太多,无法正确回答,需要更好地澄清它。 请不要发布您拥有的所有代码。仅发布最低要求部分来展示您的问题。考虑阅读How to Ask 主题,尤其是有关minimal reproducible example 的主题。 【参考方案1】:

当您使用 Caliburn.Micro 时,您可以尝试在按钮上使用以下语法。 x:Name 绑定在使用 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 function can't be triggered inside DialogHost

【讨论】:

以上是关于WPF MVVM Binding x:Name 不触发方法的主要内容,如果未能解决你的问题,请参考以下文章

关于在MVVM架构下WPF中UserControl的 visibility Binding问题。 UserControl MVVM

WPF MVVM,Prism,Command Binding

WPF 微信 MVVM 续发送部分QQ表情

WPF MvvM DataGrid数据不刷新的原因

在 WPF + MVVM +Binding + UserInput 中的 TextBox “预期格式为 DD/MM/YYYY”

(MVVM) ListBox Binding