Silverlight构造函数注入视图模型+设计模式

我试图在Silverlight 4中编写可测试的ViewModel。我正在使用MVVM灯。 我使用AutoFac和IoCContainer正在完成它的工作。 但是要注入ViewModel的构造函数,它绑定到Views我有这个构造函数链接: public UserViewModel() : this(IoCContainer.Resolve()) { } public UserViewModel(IUserServiceAsync userService) { if (this.IsInDesignMode) return; _userService = userService; } 哪个不干净,但是到目前为止我找到的最佳选择。 这是有效的,我的应用程序可以根据需要工作,并且可以通过控制倒置来测试 但是,我的VM绑定到我的视图,如下所示: 在我的XAML页面属性中,VS2010和Blend中的设计模式都不起作用。 是否有更好的方法来实现我在Silverlight中尝试仍然适用于设计模式的东西? 失去设计模式不是一个交易破坏者,但在学习XAML时会很方便。 一个更干净的无链接方式会很好! 我认为可以使用AutoFac / IoC将视图模型解析为视图,就像上面的XAML标记方法一样,并沿着这条路走下去? 谢谢。

LaTeX用于生产中的PDF生成

我在读研究生时用LaTeX写了几本白皮书。 从那以后,我对LaTeX允许用户做什么有一个非常好的印象,特别是它提供的格式控制等。 现在我在讨论是否应该将LaTeX用于我们的生产应用程序来生成PDF。 我已经尝试了几个商业和免费的PDF库(PDFSharp / MigraDoc,iTextSharp,Expert PDF等),它们都没有提供我需要的精确控制量,而不会使代码库长期难以维护。 如果我决定走这条路,它将从C#完成。 由于LaTeX已经有命令行界面,我应该可以很容易地从C#中做到这一点,作为从我的程序分叉的外部进程。 但我正在寻找社区的一些评论。 有人试过吗? 如果是这样,有什么问题? 您如何看待这个想法 – 利弊(我对gotachas更感兴趣)? 欢迎所有反馈。

在switch语句中针对枚举进行编程,这是你的方法吗?

看一下代码片段: 这是我在编写枚举时通常所做的事情。 我有一个带有InvalidOperationException的默认转义(我不使用ArgumentException或它的一个派生,因为编码是针对私有实例字段而不是传入参数)。 我想知道你们的开发人员是否也编写了这个逃避的想法…. public enum DrivingState {Neutral, Drive, Parking, Reverse}; public class MyHelper { private DrivingState drivingState = DrivingState.Neutral; public void Run() { switch (this.drivingState) { case DrivingState.Neutral: DoNeutral(); break; case DrivingState.Drive: DoDrive(); break; case DrivingState.Parking: DoPark(); break; case DrivingState.Reverse: DoReverse(); break; default: throw new InvalidOperationException( string.Format(CultureInfo.CurrentCulture, “Drivestate {0} is an unknown state”, this.drivingState)); […]

通过reflection设置属性时键入转换问题

我们有一个long?类型的属性long? 充满了int 。 当我直接设置属性obj.Value = v;时,这工作正常obj.Value = v; 但是当我尝试通过reflection信息设置属性时info.SetValue(obj, v, null); 它给了我一个以下例外: ‘System.Int32’类型的对象无法转换为’System.Nullable`1 [System.Int64]’类型。 这是一个简化的场景: class TestClass { public long? Value { get; set; } } [TestMethod] public void TestMethod2() { TestClass obj = new TestClass(); Type t = obj.GetType(); PropertyInfo info = t.GetProperty(“Value”); int v = 1; // This works obj.Value = v; // […]

使用Unity在多个类型中注入相同的DataContext实例

假设我有IRepository接口及其实现SqlRepository,它将LINQ作为参数作为SQL DataContext的参数。 假设我有IService接口及其实现服务,它需要三个IRepository,IRepository和IRepository。 演示代码如下: public interface IRepository { } public class SqlRepository : IRepository { public SqlRepository(DataContext dc) { … } } public interface IService { } public class Service : IService { public Service(IRepository r1, IRepository, IRepository) { … } } 在创建Service类以使用相同的DataContext注入所有三个存储库时是否有任何方法?

将自定义上下文菜单项添加到Windows窗体标题栏

我在MSDN上找到了一个线程 ,它显示了如何将项添加到winform标题栏的上下文菜单中。 不幸的是,它没有显示如何使用自定义菜单项注册事件,我一直无法弄清楚如何做到这一点。 下面是一个示例应用程序,可以将其复制并粘贴到新的Windows窗体应用程序中。 如果有人可以为我完成样品,我将不胜感激。 谢谢 using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); IntPtr hMenu = GetSystemMenu(Handle, false); if (hMenu != IntPtr.Zero) { var menuInfo = new MENUITEMINFO { cbSize = (uint) Marshal.SizeOf(typeof (MENUITEMINFO)), cch = 255, dwTypeData = “Test Item”, fMask […]

重构代码:什么时候做?

自从我开始使用.NET以来,我一直在创建Helper类或Partial类,以保持代码位于并包含在自己的小容器中等。 我想知道的是使代码尽可能干净和完美的最佳实践。 显然干净的代码是主观的,但我在谈论什么时候使用东西(不是如何使用它们),如多态,inheritance,接口,类以及如何更恰当地设计类(使它们更有用,而不仅仅是说’ DatabaseHelper’,正如一些人认为代码中的这种不良做法闻起来wiki )。 是否有任何资源可能有助于这种决策? 请记住,我甚至没有开设过CS或软件工程课程,而且教学资源在现实生活中相当有限。

WPF用户控件与自定义控件

我正在尝试创建一个带有每行复选框的combobox,以允许多次选择。 作为用户控件或自定义控件,这会更好吗? 我之前没有创建过一个控件,只是想找一些关于我需要走向的方向的建议。 谢谢。

如何在WPF中执行操作之前放置延迟

我尝试使用以下代码在导航到下一个窗口之前延迟2秒。 但线程首先调用,文本块显示一微秒,然后进入下一页。 我听说调度员会这样做。 这是我的片段: tbkLabel.Text = “two mins delay”; Thread.Sleep(2000); Page2 _page2 = new Page2(); _page2.Show();

使用C#将xml转换为字符串

我有如下function public string GetXMLAsString(XmlDocument myxml) { XmlDocument doc = new XmlDocument(); doc.LoadXml(myxml); StringWriter sw = new StringWriter(); XmlTextWriter tx = new XmlTextWriter(sw); doc.WriteTo(tx); string str = sw.ToString();// return str; } 我从另一个方法传递一个xml到这个方法。但是在doc.loadxml() ,系统期待一个字符串,因为我传递了一个xml,它会抛出error.Pls帮助。 提前致谢..