gpt4 book ai didi

c# - UWP 与 Caliburn.Micro 的约定

转载 作者:行者123 更新时间:2023-11-30 20:40:01 29 4
gpt4 key购买 nike

我创建了一个示例 UWP 项目,并根据 this tutorial 添加了 Caliburn.Micro 3.0 beta1。 .

使用 SplitView,我可以在按下 Pane 按钮时添加一个新的 ViewModel:

外壳 View

 <Button x:Name="OpenSecondView"
Margin="24"
Content="My Second View" />

ShellViewModel

public void OpenSecondView()
{
_navigationService.For<MainViewModel>().Navigate();
}

它加载了正确的 View (所以我认为,约定正在起作用)。

我在详细 View 中有一个按钮,它设置了 Name 属性。

主视图

<Button Name="btnStartAction"
HorizontalAlignment="Center"
VerticalAlignment="Center"
RelativePanel.AlignHorizontalCenterWithPanel="True"
RelativePanel.Below="btnInformation"
Style="{StaticResource button}">

我在 ViewModel 中添加了一个同名方法。

主视图模型

public void btnStartAction()
{
var x = 2;
}

不幸的是,当我点击它时,没有任何反应。

我应该设置什么?

更新

好吧,奇怪的事情发生了。

如果我在 MainView.xaml.cs 中添加以下行,该按钮将起作用:

public MainView()
{
this.InitializeComponent();
this.DataContext = new MainViewModel();
}

因此,ViewModel 似乎可以找到它的 View (因此我可以看到它)但是该 View 没有 DataContext。

我该怎么办?

更新 2

这就是 Frame 注册的方式。

XAML

 <SplitView.Content>
<Grid>
<Frame Grid.Row="1"
DataContext="{x:Null}"
cm:Message.Attach="[Event Loaded] = [SetupNavigationService($source)]" />
</Grid>
</SplitView.Content>

ShellModelView

public ShellViewModel(WinRTContainer container)
{
_container = container;
}

public void SetupNavigationService(Frame frame)
{
_navigationService = _container.RegisterNavigationService(frame);
}

最佳答案

Caliburn Micro 约定功能使用 x:Name 指令而不是 Name 属性。

<Button x:Name="btnStartAction"
HorizontalAlignment="Center"
VerticalAlignment="Center"
RelativePanel.AlignHorizontalCenterWithPanel="True"
RelativePanel.Below="btnInformation"
Style="{StaticResource button}">

更新

很抱歉给错了信息,Name 和 x:Name 都可以用于约定。

您应该将 MainViewModel 注册到 WinRTContainer

App.xaml.cs

public sealed partial class App
{
private WinRTContainer _container;

protected override void Configure()
{
_container = new WinRTContainer();
_container.RegisterWinRTServices();

_container
.PerRequest<ShellViewModel>()
.PerRequest<MyFirstViewModel>()
.PerRequest<MySecondViewModel>()
.PerRequest<MyThirdViewModel>()
.PerRequest<MainViewModel>();

var navigationManager = SystemNavigationManager.GetForCurrentView();

navigationManager.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;

}
}

有关简单容器的更多信息,请参阅 Simple IoC Container .

关于c# - UWP 与 Caliburn.Micro 的约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33799389/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com