下面的代码显示了一个允许选择美国州的自动填充表单控件.
<mat-form-field class="example-full-width">
<input matInput placeholder="State" aria-label="State" [matAutocomplete]="auto" [formControl]="stateCtrl">
<mat-autocomplete #auto="matAutocomplete">
<mat-option *ngFor="let state of filteredStates | async" [value]="state.name">
<img style="vertical-align:middle;" aria-hidden src="{{state.flag}}" height="25" />
<span>{{ state.name }}</span> |
<small>Population: {{state.population}}</small>
</mat-option>
</mat-autocomplete>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud)
但是,如果在我的应用程序中我有许多需要这种类型输入的位置,那么将它转换为一个组件(指令?)是有意义的,其中所有样板都不需要重复.但是,我仍然希望能够在模板驱动或模型驱动的表单中使用它,并允许容器组件改变占位符,验证等.
实现这一目标的简单而有力的方法是什么?
我尝试过为Angular推荐的一般方法,但它们没有考虑Angular Material的各种要求.例如,需要实现MatFormFieldControl.Angular Material提供的指导更多地是使用原始元素创建新的表单控件,而不是利用/包装现有的Angular Material表单控件.
目标是能够以这样的形式做这样的事情:
<mat-form-field>
<lookup-state placeholder="State of Residence" required="true" formControlName="resState">
</lookup-state>
</mat-form-field>
Run Code Online (Sandbox Code Playgroud) 我正在尝试在ListBox ItemTemplate中获取上下文菜单以调用父视图模型上的方法,并将作为参数单击的项目传入.我有这个工作项目模板中的其他按钮,但对于上下文菜单,它似乎失败了.
我有以下xaml(缩写为清晰):
<ListBox>
<ListBox.GroupStyle>
<GroupStyle>
...
</GroupStyle>
</ListBox.GroupStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ContextMenu>
<ContextMenu Name="cm">
<MenuItem Header="Open"
cal:Message.Attach="Open($dataContext)">
</MenuItem>
</Grid.ContextMenu>
<TextBlock VerticalAlignment="Center" >
.. text..
</TextBlock>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,这与视觉树不同的事实有关,因此Caliburn无法可靠地解决方法.我确定这是一个常见问题,我尝试了一些我在网上发现的东西,但似乎没有任何效果.
有任何想法吗??
我在Caliburn-Micro Silverlight应用程序中使用Castle-Windsor作为我的容器.我的ViewModel对象相当粗糙,因为它们调用WCF服务和其他一些东西.因此,当关闭窗口我想打电话给container.Release(视图模型),这样可以城堡管理整个退役/处置过程中,尊重配置的各个生命周期(如中概述这篇文章).
在我的AppBootstrapper中,我重写了GetInstance,如下所示:
protected override object GetInstance(Type serviceType, string key)
{
if (string.IsNullOrEmpty(key)) return container.Resolve(serviceType);
return container.Resolve(key, serviceType);
}
Run Code Online (Sandbox Code Playgroud)
但我正在努力想出一种干净/优雅的呼唤方式container.Release(viewModel).似乎没有任何钩子可用于此.
在Caliburn Micro应用程序中释放从ViewModelLocator返回的ViewModel对象的最简单方法是什么?
鉴于以下课程:
public class Lookup
{
public string Code { get; set; }
public string Name { get; set; }
}
public class DocA
{
public string Id { get; set; }
public string Name { get; set; }
public Lookup Currency { get; set; }
}
public class ViewA // Simply a flattened version of the doc
{
public string Id { get; set; }
public string Name { get; set; }
public string CurrencyName { get; set; } // …Run Code Online (Sandbox Code Playgroud) 我有一个IEnumerable<T>地方T允许推导相关的时间戳.
我想将其转换为IObservable<T>但我希望使用,HistoricalScheduler以便根据派生的时间戳发生通知.这样做允许使用内置的RX方法进行窗口化,滑动窗口等,这最终是我想要利用的.
关于如何进行此操作的许多建议建议使用Generate().但是,此方法会导致StackOverflowExceptions.例如:
static void Main(string[] args)
{
var enumerable = Enumerable.Range(0, 2000000);
var now = DateTimeOffset.Now;
var scheduler = new HistoricalScheduler(now);
var observable = Observable.Generate(
enumerable.GetEnumerator(),
e => e.MoveNext(),
e => e,
e => Timestamped.Create(e, now.AddTicks(e.Current)),
e => now.AddTicks(e.Current),
scheduler);
var s2 = observable.Count().Subscribe(eventCount => Console.WriteLine("Found {0} events @ {1}", eventCount, scheduler.Now));
scheduler.Start();
s2.Dispose();
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
这将导致堆栈溢出.
ToObservable()无法使用标准方法,因为虽然它允许指定自定义调度程序,但它不提供任何机制来控制如何在该调度程序上调度生成的通知.
如何转换的IEnumerable一个IObservable具有明确地安排通知?
在以下测试中尝试使用Asti的代码:
static void Main(string[] …Run Code Online (Sandbox Code Playgroud) 当使用cascade ="all-delete-orphan"时,NHibernate正在删除一个没有孤立的子行 - 它只是被移动到一个新的父级.
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
// Get the store we're moving him to
Store newStore = session.QueryOver<Store>().Where(...).SingleOrDefault();
// Get existing employee
Employee jack = session.QueryOver<Employee>().Where(...).SingleOrDefault();
// Do the move
jack.Store.Staff.Remove(jack);
jack.Store = newStore;
jack.Store.Staff.Add(jack);
transaction.Commit();
}
}
Run Code Online (Sandbox Code Playgroud)
提交时,会生成一个DELETE语句以从数据库中删除"jack".如果'jack'实际上已经成为孤儿,这种行为是有道理的,但他现在应该乐意分配到他的新店.
如果我将级联更改为"all",则会生成预期的UPDATE语句,并且可以按预期快速重新分配"jack".但是,这会导致真正的孤立行保留在数据库中,这是不可接受的.
这是一个错误还是我做错了什么?
以下是课程:
public class Store
{
public virtual Guid Id { get; private set; }
public virtual string Name { get; set; }
public virtual IList<Employee> Staff { get; set; …Run Code Online (Sandbox Code Playgroud) 我熟悉RX并且作为我的实验项目,我正在尝试创建一个简单的命令总线,在概念上类似于:
class Bus
{
Subject<Command> commands;
IObservable<Invocation> invocations;
public Bus()
{
this.commands = new Subject<Command>();
this.invocations = commands.Select(x => new Invocation { Command = x }).Publish();
}
public IObserver<Command> Commands
{
get { return this.commands; }
}
public IObservable<Invocation> Invocations
{
get { return this.invocations; }
}
}
class Invocation
{
public Command Command { get; set; }
public bool Handled { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这个想法是模块可以在启动时使用Invocations属性安装命令处理程序,并可以将他们希望的任何过滤应用于他们的订阅.另一方面,客户端可以通过调用来触发命令执行Commands.OnNext(command).
但是,我希望总线能够保证提交的每个命令都只由一个处理程序处理.也就是说,OnNext一旦第一个处理程序将Invocation.Handled设置为true,理想情况下应该终止处理,如果在结束时仍然为假OnNext(),Invocation.Handled则应该抛出异常.
我玩了创建自己的ISubject,IObservable和IObserver实现,但这感觉"脏又便宜";)
我正在努力探索RX提供的组合能力.在组合方式中,我如何提供"一次性"保证? …