小编Ada*_*dam的帖子

直接绑定到DataContext w/Converter时的WPF更新绑定

通常,当您希望数据绑定控件"更新"时,使用"PropertyChanged"事件向接口发出数据在幕后发生更改的信号.

例如,您可以使用属性"DisplayText"绑定到datacontext的文本块

<TextBlock Text="{Binding Path=DisplayText}"/>

从这里,如果DataContext使用PropertyName"DisplayText"引发PropertyChanged事件,则此文本块的文本应该更新(假设您没有更改绑定的模式).

但是,我有一个更复杂的绑定,它使用datacontext的许多属性来确定控件的最终外观.为此,我直接绑定到datacontext并使用转换器.在这种情况下,我正在使用图像源.

<Image Source="{Binding Converter={StaticResource ImageConverter}}"/>

如您所见,我使用没有路径的{Binding}直接绑定到datacontext,我使用ImageConverter选择我正在寻找的图像.但现在我无法(我知道)告诉绑定更新.我试着用"."来提高propertychanged事件.作为属性名称,它不起作用.

这可能吗?我是否必须将转换逻辑包装到绑定可以附加到的属性中,或者有没有办法告诉绑定刷新(没有明确刷新绑定)?

任何帮助将不胜感激.谢谢!-亚当

data-binding wpf datacontext propertychanged

8
推荐指数
1
解决办法
5402
查看次数

C#聚结算子的原子性

我今天在代码库中遇到了一些单例代码,我不确定以下是否是线程安全的:

public static IContentStructure Sentence{ 
    get {
       return _sentence ?? (_sentence = new Sentence()); 
    }
}
Run Code Online (Sandbox Code Playgroud)

该陈述相当于:

if (_sentence != null) {
       return _sentence;
}
else {
    return (_sentence = new Sentence());
}
Run Code Online (Sandbox Code Playgroud)

我相信 ??只是一个编译器技巧,结果代码仍然不是原子的.换句话说,在将_sentence设置为新句子并返回之前,两个或多个线程可以找到_sentence为null.

为了保证原子性,我们必须锁定那段代码:

public static IContentStructure Sentence{ 
    get {

       lock (_sentence) { return _sentence ?? (_sentence = new Sentence()); }
    }
}
Run Code Online (Sandbox Code Playgroud)

那一切都正确吗?

c# atomic null-coalescing-operator

7
推荐指数
2
解决办法
634
查看次数

没有更新数据库的EF6种子

我现在有一个应用程序设置使用EF6 Code-First Migrations.我使用Add-Migration的标准工作流程,然后在Console中使用Update-Database.我在本地以及在我们的开发环境中使用MigrateDatabaseToLatestVersion初始化程序.这将自动为我和其他开发人员处理所有迁移.

我对允许在生产中进行自动迁移感到不舒服,所以我运行了Update-Database -script来生成一个我可以在运行之前查看的SQL脚本.这非常有效,我对这个部署过程很满意.但是,我意识到SEED方法永远不会运行,因为Update-Database没有直接在数据库上运行.

我正在寻找一种让迁移配置上的SEED方法在不运行实际迁移的情况下运行的好方法.我发现migrate.exe(http://msdn.microsoft.com/en-us/data/jj618307.aspx)似乎可以正常工作,但我想知道是否有人知道更好的方法.

此外,也许更重要的是,我担心生产中的自动迁移是荒谬的,考虑到我已经使用EF6已经固有的自动化程度了吗?

谢谢!

c# deployment entity-framework ef-migrations

5
推荐指数
1
解决办法
3938
查看次数

Unity MVC GetService在后台线程抛出NullReferenceException

据我所知,DependencyResolver是线程安全的,但运行以下代码会在后台线程中引发空引用异常.

public interface ITest {

}
public class Test : ITest {

}

//this works fine
var service = DependencyResolver.Current.GetService<ITest>();

var t1 = Task.Run(() => {
   //This throws a Null Reference exception.
   // note that DependencyResolver.Current is NOT null.  
   // The exception occurs in GetService
   var s1 = DependencyResolver.Current.GetService<ITest>();
});
Task.WaitAll(t1);
Run Code Online (Sandbox Code Playgroud)

这是堆栈跟踪:

at Unity.Mvc4.UnityDependencyResolver.get_ChildContainer()
at Unity.Mvc4.UnityDependencyResolver.IsRegistered(Type typeToCheck)
at Unity.Mvc4.UnityDependencyResolver.GetService(Type serviceType)
at System.Web.Mvc.DependencyResolverExtensions.GetService[TService](IDependencyResolver resolver)
at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
Run Code Online (Sandbox Code Playgroud)

我知道"服务定位器"模式是一种反模式.在这一点上,我只是想了解为什么这不起作用.

任何见解将不胜感激.

谢谢!

multithreading unity-container service-locator asp.net-mvc-3

3
推荐指数
1
解决办法
1472
查看次数

HTML5移动Safari DatePicker-初始值

我们正在开发.NET MVC移动网站。我了解在iPhone上,移动浏览器会在以下输入字段中显示日期选择器:

<input type="date"/>
Run Code Online (Sandbox Code Playgroud)

我们有一个标准的日期选择器帮助器,可为各种平台显示日期选择器选项。在这种情况下,我们检测到了移动浏览器,然后写出了一个绑定到我们模型的输入字段:

<input name="StartDate" value="2008/12/21" type="date"/>
Run Code Online (Sandbox Code Playgroud)

问题在于,值部分未在加载时显示。我们可以输入新值,并将其保存回我们的数据库。但是,当我们重新加载页面时,这些值不会显示在字段中。如果再次保存,则在数据库中所有值都将重新设置为null。

我注意到,当您在iPhone上选择带轮子的日期时,文本字段的值最终以类似于“ 2012年4月6日”的格式显示,我希望它显示为2012/04/06或04 2012年6月6日。

我的猜测是,移动浏览器会显示字段的其他属性,然后在幕后适当地设置value属性。

有谁知道这是怎么回事?谢谢!

asp.net-mvc mobile html5 datepicker mobile-safari

2
推荐指数
1
解决办法
3239
查看次数