WPF MVVM 绑定 x:Name 未触发方法
WPF MVVM Binding x:Name not triggering method
我是 WPF 新手,周三开始尝试学习它。我已经开始研究 Caliburn.Micro 和 MVVM,并且在应用程序中使用 MaterialDesignInXAML Nuget 包进行 material 设计。由此我创建了一个我想使用的基本应用程序。这个应用程序有从侧面滑出的抽屉菜单。在此菜单上,我有许多按钮。我希望能够单击这些按钮并使用我创建的相关 UserControl 视图更新我的 ContentControl。我在 public ShellViewModel(){LoadHome();}
方法中有 LoadHome()
并且当我启动应用程序时加载它,但是单击菜单中的按钮不会更新 contentcontrol 也不会触发任何断点,即使认为它使用的是其他人使用的相同 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()
{
}
}
当您使用 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 新手,周三开始尝试学习它。我已经开始研究 Caliburn.Micro 和 MVVM,并且在应用程序中使用 MaterialDesignInXAML Nuget 包进行 material 设计。由此我创建了一个我想使用的基本应用程序。这个应用程序有从侧面滑出的抽屉菜单。在此菜单上,我有许多按钮。我希望能够单击这些按钮并使用我创建的相关 UserControl 视图更新我的 ContentControl。我在 public ShellViewModel(){LoadHome();}
方法中有 LoadHome()
并且当我启动应用程序时加载它,但是单击菜单中的按钮不会更新 contentcontrol 也不会触发任何断点,即使认为它使用的是其他人使用的相同 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()
{
}
}
当您使用 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