- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
让我解释一下我的问题。请原谅我的长问题。开始了。
我有一个 View (BusyProviderView)
<Grid>
<xctk:BusyIndicator x:Name="aaa" IsBusy="{Binding IsRunning}" >
<xctk:BusyIndicator.BusyContentTemplate>
<DataTemplate>
<Grid cal:Bind.Model="{Binding}">
<TextBlock Name="Message"/>
</Grid>
</DataTemplate>
</xctk:BusyIndicator.BusyContentTemplate>
</xctk:BusyIndicator>
</Grid>
其中有 View 模型:
public class BusyProviderViewModel : PropertyChangedBase, IBusyProvider
{
//two properties with INPC, Message and IsRunning
}
同样,我有一个Shell View
<Window x:Class="MvvmTest.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ShellView" Height="300" Width="300">
<Grid>
<Button Height="25" x:Name="Run">Run</Button>
<ContentControl x:Name="BusyProvider"/>
</Grid>
它有一个 View 模型
public class ShellViewModel : PropertyChangedBase, IShellViewModel
{
private IBusyProvider busyProvider;
public ShellViewModel(IBusyProvider busy)
{
this.BusyProvider = busy;
}
public IEnumerable<IResult> Run()
{
yield return new DummyOperation(this.BusyProvider);
}
public IBusyProvider BusyProvider
{
get
{
return this.busyProvider;
}
set
{
if (Equals(value, this.busyProvider))
{
return;
}
this.busyProvider = value;
this.NotifyOfPropertyChange(() => this.BusyProvider);
}
}
}
DummyOperation 外观
public class DummyOperation : IResult
{
public IBusyProvider Provider { get; set; }
public DummyOperation(IBusyProvider provider)
{
Provider = provider;
}
public void Execute(ActionExecutionContext context)
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (a, b) =>
{
Provider.IsRunning = true;
Provider.Message = "Working";
Thread.Sleep(TimeSpan.FromSeconds(5));
Provider.Message = "Stopping";
Thread.Sleep(TimeSpan.FromSeconds(5));
Provider.IsRunning = false;
};
worker.RunWorkerCompleted += (a, b) =>
{ Completed(this, new ResultCompletionEventArgs()); };
worker.RunWorkerAsync();
}
public event EventHandler<ResultCompletionEventArgs> Completed;
}
终于有了BootStrapper
public class AppBootstrapper : Bootstrapper<IShellViewModel>
{
private Container container;
protected override void Configure()
{
this.container = new Container();
this.container.Register<IWindowManager,WindowManager>();
this.container.Register<IShellViewModel,ShellViewModel>();
this.container.Register<IBusyProvider, BusyProviderViewModel>();
}
protected override object GetInstance(Type serviceType, string key)
{
return this.container.GetInstance(serviceType);
}
protected override IEnumerable<object> GetAllInstances(Type serviceType)
{
return this.container.GetAllInstances(serviceType);
}
protected override void BuildUp(object instance)
{
this.container.Verify();
}
}
看起来我已经设置好了一切,但是当我尝试运行它时会抛出异常。
我确定问题是由
引起的 <DataTemplate>
<Grid cal:Bind.Model="{Binding}">
<TextBlock Name="Message"/>
</Grid>
</DataTemplate>
cal:Bind.Model="{Binding}
一旦我删除上面的语句,程序就会运行而不会崩溃,但不会绑定(bind)。
如果你看图片,
protected override object GetInstance(Type serviceType, string key)
{
return this.container.GetInstance(serviceType);
}
serviceType 作为 NULL 传递,键是 "Please Wait..." ,这是从哪里来的??
最佳答案
默认情况下似乎是 Extended Toolkit的 BusyIndicator
使用字符串 "Please Wait...."
作为 BusyContent
。所以在 DataTemplate
中,DataContext
将是上面提到的字符串,这会导致 Caliburn 中的混淆和异常。
要修复它,您需要将 BusyIndicator
上的 BusyContent
设置为当前的 DataContext
,它将起作用:
<xctk:BusyIndicator x:Name="aaa" IsBusy="{Binding IsRunning}"
BusyContent="{Binding}" >
<xctk:BusyIndicator.BusyContentTemplate>
<DataTemplate>
<Grid cal:Bind.Model="{Binding}">
<TextBlock Name="Message"/>
</Grid>
</DataTemplate>
</xctk:BusyIndicator.BusyContentTemplate>
</xctk:BusyIndicator>
关于c# - Caliburn 绑定(bind)异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12019483/
最近我看到this详细说明 Caliburn 有多棒的文档(实际上并没有将它与微框架进行比较,这就足够了)。我在 Caliburn 工作了一年多,对它了解不多。 所以也许有人可以解释以下内容(其中一些
我有以下 ViewModel,我正在使用 Caliburn Micro。 IWindowManager 实例已正确解析,并且所有代码都可以正常工作。如 TODO 注释所示,我需要获取对当前窗口的引用,
所以我在 Caliburn.Micro 上摆弄了一下,突然发现了一些有趣的东西。 我有一个名为 Maximum 的 ViewModel 属性,类型为 int,通过命名约定与 CM 自动绑定(bind)
如果我的 View 中有一个名为 Save 的按钮,那么我可以将 Save 属性添加到我的 ViewModel,Caliburn.Micro 会自动将它绑定(bind)到我的按钮的内容。例如: pub
我一直在研究开发一个新的 MVVM WPF 桌面应用程序,并已将 Caliburn 和 Caliburn.Micro 列入候选名单。 我特别喜欢您在 Caliburn 中获得的自动绑定(bind)属性
当我使用绑定(bind)约定时在caliburn中,并将内容控件命名为“CurrentPresenter” 框架自动绑定(bind)到虚拟机并定位相关 View 。 如果我手动执行此绑定(bind),
我将 ViewModels 绑定(bind)到 ContentControls 并让 Caliburn 负责创建和绑定(bind) View 。但是,我想根据我绑定(bind)的 ContentCon
我从 Caliburn.micro 开始,我有点困惑。假设我有一个带有 2 个 Pane 的 UI,例如(这是一个假示例)CustomersView 和 CustomerView,以及 2 个相应的
我一直在尝试将 Caliburn.Micro MVVM 框架集成到我处于中间位置的 C# WPF 项目中。 我目前只有三个 View 模型: ShellViewModel -(带有 ContentCo
Caliburn.Micro 是否有与 Catel's 类似的功能? [ExposeAttribute] ? 有没有其他方法可以减轻 Caliburn.Micro 中传递属性的工作? (即模型中的属性
我想弄清楚如何将文本添加到列表框的底部并显示它。在带有代码的 WPF 中,我会捕获 ScrollViewer 并对其进行操作,但我无法弄清楚如何使用 Caliburn 来做到这一点... 最佳答案 您
我这样做: 问题是,这同时是主窗口上定义的主导体,我用它控制通过其他窗口的导航,所以我不能从 MetroWindow 继承,至少尝试更改 ViewModel 中的标题: public class S
我试图弄清楚如何成功地让 Caliburn Micro 在 Windows Phone 8.1 应用程序中从一个页面导航到另一个页面。 我的第一页加载得很好,正如我的 App 类中所指定的: prot
我正在用不同的项目编写解决方案。我使用caliburn micro编写了2个wpf客户端。它们都具有一个 map 控件,该控件绘制了一些图层和一个listview。我想在不同项目中托管通用控件,以便两
在尝试学习 GameLibrary 示例应用程序的源代码时,我看到了这样一行: ConventionManager.AddElementConvention(Rating.ValueProperty,
我正在使用 C# 和 Caliburn。 是否有一种全局方式来捕获所有 View 模型中的所有异常? 如果从 DI/IoC 容器导入过程中出现某种异常怎么办? 我基本上想在发生这种情况时显示一个消息框
位于http://caliburnmicro.com的Caliburn.Micro主页提出以下声明,但我无法使用该示例中可以想到的任何变体使CM与PasswordBox控件一起使用。因为名称不同,所以
我正在迈出 MVVM 的第一步。 我正在使用 Caliburn.Micro 作为我的 MVVM 框架。 我有以下代码: using System; using System.Collections.G
我正在开发一个使用 Caliburn Micro 的 WPF 项目。我遇到了一个问题,即第二次打开 View 时, View 中的控件没有得到更新。第一次数据绑定(bind)工作正常。 当我第二次调用
在我的 WPF Caliburn.Micro 应用程序中,我有一个 TabControl。我希望能够根据需要关闭标签。我在这里找到了一种方法: http://devlicio.us/blogs/rob
我是一名优秀的程序员,十分优秀!