假设绑定是正确的并且图像文件是它们所处的位置,那么有人能够发现当触发器评估为真时下面的xaml中的图像不会改变的原因吗?
干杯,
Berryl
<Image Source="..\..\Images\OK.png" Grid.Column="2" Stretch="None">
<Image.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding TimeSheet, Converter={StaticResource overQuotaConv}}" Value="True">
<Setter Property="Image.Source" Value="..\..\Images\Error.png"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
Run Code Online (Sandbox Code Playgroud) 我有一个视图模型来管理对话框类型的视图,允许过滤列表(如果需要)和选择项目.无论我是否将IsSynchronizedWithCurrentItem设置为true,代码都能正常工作.我的理解是这个属性在ListView中默认是不正确的,所以我想更好地理解这个属性.
这是视图的xaml中的绑定设置(在没有synch属性设置的情况下也可以正常工作):
<ListView
ItemsSource="{Binding Projects.View}"
IsSynchronizedWithCurrentItem="True"
SelectedItem="{Binding SelectedProject, Mode=TwoWay}"
>
Run Code Online (Sandbox Code Playgroud)
视图模型Projects实际上是一个由私有ObservableCollection支持的CollectionViewSource.我想我从Josh Smith的一个示例项目中琢磨了这个想法,但老实说我现在不记得了.以下是与xaml绑定相关的VM的相关部分:
private ObservableCollection<ProjectViewModel> _projectsInternal { get; set; }
public CollectionViewSource Projects { get; set; }
private void _populateProjectListings(IEnumerable<Project> openProjects) {
var listing = (from p in openProjects
orderby p.Code.ToString()
select new ProjectViewModel(p)).ToList();
foreach (var pvm in listing)
pvm.PropertyChanged += _onProjectViewModelPropertyChanged;
_projectsInternal = new ObservableCollection<ProjectViewModel>(listing);
Projects = new CollectionViewSource {Source = _projectsInternal};
}
/// <summary>Property that is updated via the binding to the view</summary>
public ProjectViewModel SelectedProject { get; set; …Run Code Online (Sandbox Code Playgroud) 我在对话框视图模型中使用CollectionViewSource,它具有各种过滤要求,工作正常.我还维护了属性(SelectedProject)中所选项目的等价物,我想知道是否可以/应该取消它,因为View将知道当前项目.我的数据绑定看起来像:
<ListView
ItemsSource="{Binding Projects.View}"
IsSynchronizedWithCurrentItem="True"
SelectedItem="{Binding SelectedProject, Mode=TwoWay}">
Run Code Online (Sandbox Code Playgroud)
我使用SelectedProject的setter来促进单元测试,并且就我所见,CurrentItem似乎不可设置.当我想使用它时,我还需要将它强制转换为正确的对象.OTOH,如果 SelectedProject是冗余的,那么我会向它显示与任何其他冗余相同的尊重并删除它.
那么,当您使用CollectionViewSource时,您通常如何处理当前项?
不是总增量,而是每个元素的增量.这里有一些代码来解释我的意思:
var deltaTotals = _deltaEnumerable.Select(a => a.Amount).ToList();
var oldTotals = _totalsEnumerable.Select(d => d.Amount).ToList();
// trigger change in _totalsEnumerable
// ** can LINQ do the lines below
var newTotals = totalsEnumerable.Select(d => d.Amount);
for (var i = 0; i < 7; i++) {
var newAmount = oldTotals[i] - deltaTotals[i];
Assert.That(newTotals.ElementAt(i), Is.EqualTo(newAmount));
}
Run Code Online (Sandbox Code Playgroud)
这是最后四行代码,似乎在某种程度上可能有更优雅的方式在LINQ中做.
干杯,
Berryl
映射属性是否提供与nhib hbm相同的多功能性?你能和FNH一起使用它们来处理FNH还没有像hbm那样做的东西吗?
干杯,
Berryl
通过映射属性,我不是指hbm文件; NHIB(或者现在可能是NHib贡献者)显然存在属性,用于装饰类和类属性.我猜这些早期的FNH,但不确定.
有没有人有TDD-ish方法来设计复杂的WPF xaml组件(即ControlTemplates,具有依赖属性的自定义控件)?
用户眼球是否最接近您断言您的代码是否正确?增量发展如何; 是否有助于逐步划分逻辑?
如果现在没有任何方法可以做到这一点,您认为随着平台继续成熟并获得采用,会有什么方法吗?
干杯,
Berryl
为了更加专注并避免引入TDD,请考虑将TDD应用于传统代码库(包括MVVM)的相当经验丰富的受众的主题.
我想使用2008 Sql Server Mgt Studio将2005 db升级到2008,并在最后收到警告.问题:
另外,我唯一真正的动机是日期时间类型已成为一个问题.人们在日期和日期时间2之前需要比18世纪更早的日期时做了什么?
SQL Server代理似乎未在目标服务器上运行.如果SQL Server代理未在目标服务器上运行,则"复制数据库向导"将无法正常运行.你想继续吗?
public static class RandomProvider
{
private static int seed = Environment.TickCount;
private static ThreadLocal<Random> randomWrapper = new ThreadLocal<Random>(() =>
new Random(Interlocked.Increment(ref seed))
);
public static Random GetThreadRandom()
{
return randomWrapper.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
我想在.NET 3.5项目中使用相同的概念,因此ThreadLocal不是一个选项.
如果没有ThreadLocal的帮助,你如何修改代码以拥有一个线程安全的随机提供程序?
好的,我现在和Simon的[ThreadStatic]一起去,因为我最了解它.这里有很多好的信息可以随着时间的推移进行审核和重新思考.谢谢大家!
public static class RandomProvider
{
private static int _seed = Environment.TickCount;
[ThreadStatic]
private static Random _random;
/// <summary>
/// Gets the thread safe random.
/// </summary>
/// <returns></returns>
public static Random GetThreadRandom() { return _random ?? (_random = …Run Code Online (Sandbox Code Playgroud) 一般来说,我仍然习惯于附加行为,并且看不出如何为一个人编写单元测试.
我在Sacha Barber的Cinch框架下面粘贴了一些代码,允许通过附加行为关闭窗口.有人能告诉我一个示例单元测试吗?
谢谢!
Berryl
#region Close
/// <summary>Dependency property which holds the ICommand for the Close event</summary>
public static readonly DependencyProperty CloseProperty =
DependencyProperty.RegisterAttached("Close",
typeof(ICommand), typeof(Lifetime),
new UIPropertyMetadata(null, OnCloseEventInfoChanged));
/// <summary>Attached Property getter to retrieve the CloseProperty ICommand</summary>
public static ICommand GetClose(DependencyObject source)
{
return (ICommand)source.GetValue(CloseProperty);
}
/// <summary>Attached Property setter to change the CloseProperty ICommand</summary>
public static void SetClose(DependencyObject source, ICommand command)
{
source.SetValue(CloseProperty, command);
}
/// <summary>This is the property changed handler for the Close property.</summary>
private …Run Code Online (Sandbox Code Playgroud) 我正在尝试从NH 3.0 Cookbook中获取一些代码,并想知道为什么我无法获得下面的代码来编译.我认为应该使这个工作的QueryProjectionBuilder在"NHibernate.Criterion.Lambda"中,但它的using指令没有帮助.
问题是SelectGroup和SelectAvg部分.假设书中的语法是正确的,那么有人可以看到缺少的参考吗?
namespace Queries.Implementations
{
using System;
using System.Collections.Generic;
using System.Linq;
using Eg.Core;
using NHibernate;
using NHibernate.Criterion;
using NHibernate.Criterion.Lambda;
public class QueryOverQueries : CookbookQueriesBase
{
public override IEnumerable<NameAndPrice> GetAvgDirectorPrice(ISession session) {
return _session.QueryOver<Movie>()
.Select(list => list
.SelectGroup(m => m.Director)
.SelectAvg(m => m.UnitPrice)
)
.List<object[]>()
.Select(props =>
new NameAndPrice
{
Name = (string) props[0],
Price = (decimal) props[1]
});
}
}
}
Run Code Online (Sandbox Code Playgroud) wpf ×5
c# ×4
nhibernate ×3
.net ×2
data-binding ×2
.net-3.5 ×1
datatrigger ×1
itemssource ×1
linq ×1
projection ×1
queryover ×1
random ×1
selecteditem ×1
silverlight ×1
sql-server ×1
tdd ×1
unit-testing ×1