小编Chr*_*ert的帖子

C#EventHandler漂亮的代码(如何?)

我承认,它有点小,但我正在寻找更好的方法来执行以下代码块.他们应该自我解释......

    private void listBoxItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        var listBoxItem = sender as ListBoxItem;
        if (listBoxItem != null)
        {
            var clickObject = listBoxItem.DataContext as ClickObject;
            if (clickObject != null)
            {
                clickObject.SingleClick();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

另一个丑陋的:

    private void listBox_SelectionChangedA(object sender, SelectionChangedEventArgs e)
    {
        var lB = sender as ListBox;
        if (lB != null)
            StatusBoxA.Text = "Elements selected" + lB.SelectedItems.Count;
    }
Run Code Online (Sandbox Code Playgroud)

是的,我知道,它并非近乎死亡.但我不喜欢(if!= null).任何神奇的想法都会缩短它:-)

顺便说一句,我找到了一些关于类似主题的好消息:Null Items上的循环 很好看...

wpf event-handling

5
推荐指数
2
解决办法
1179
查看次数

WPF - 普通[标签:输入]控制的最佳实践

我想知道,这是获得WPF中众所周知的标签输入[或输出,无关紧要]组合的最佳和最快捷方式.它是一个简单的任务,只想到"对象"ME的快速输出:


姓名 - 基督徒

年龄 - 28岁

心情 - 很好


我知道,我可以使用带有TextBlocks的Grid.但说实话,这个"短"的XAML几乎是半页(每个标签上的RowDefinitions,ColDefs,Grid.Col)

另一种方法,使用三个StackPanels(水平)和一个垂直方向似乎也有点愚蠢.在这种情况下,我必须给每个Label一个固定的宽度,以使缩进正确.它只是没有"感觉"正确.

所以,鉴于上面的情况,你得到一个自定义对象,只需要将3-6属性转换为只读的GUI,你会怎么做(在WPF,Silverlight中,如果你真的心情:).

当然,我可以为此编写一个usercontrol.但是为什么重新发明轮子,如果它可能已经在那里......

最后,为了进一步说明,我刚才在现实生活中创建的例子就是这篇文章的原因:

      <StackPanel>
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="Log Count"  Width="100"/>
            <TextBlock Text="{Binding LastLogRun.LogMessageCount}"/>
        </StackPanel>
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="Start Time" Width="100"/>
            <TextBlock Text="{Binding LastLogRun.StartTime}"/>
        </StackPanel>
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="End Time" Width="100"/>
            <TextBlock Text="{Binding LastLogRun.EndTime}"/>
        </StackPanel>
    </StackPanel>
Run Code Online (Sandbox Code Playgroud)

wpf controls text label

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

多个ListAdapter或单个,使用过滤(Android性能)

尝试关注有关列表的一般"dos和donts",例如,添加和删除200项目列表中的30项更好然后清除和重新填充?或者在这方面的任何其他提示 - 我真的不能尝试我的手机,快速为此:-)

有没有办法计算列表操作的内存开销/计算能力.背景如下:

我在页面上有一个列表视图,页面底部有3个选项卡(全部,搜索,最近).现在,如果您单击选项卡,listview应该显示适当的项目.

现在有两种不同的方法,一种是:

使用单一ListAdapter,筛选项目相应的
-如果您单击全部,只是把从数据库中的所有项目到它
-如果您单击最近,只是把其中符合要求的项目

使用两个(三个)ListAdapter,每个类别一个
- 如果单击全部,将列表的
addAdapter()设置为适当的 - 如果单击"最近",则将"适配器"()设置为适当的一个

我们讨论的是200个项目的列表,这些项目是从数据库中创建的复杂对象.例如,当搜索项目时,您输入标题的一部分,列表应仅显示相应的项目.这些项目不会被重新创建,我只会查询ID,并使用缓冲的项目(请参阅后面的数据结构).

我还不确定的是"在哪里过滤",我可以在数据库中做到(从标题LIKE abc中选择),然后是EITHER:

  • 从列表中删除不匹配的项目并添加所有匹配(但不包括)的项目
  • 清除整个列表,添加所有匹配的项目

再次,澄清App数据的结构:

  • 包含原始简单条目的数据库(带ID +标题+ ...)
  • 具有复杂条目的HashSet,从DB创建一次,readonly +始终是所有条目
  • listView中显示的当前条目的ArrayList

我希望你得到我的漂移,我想要感受"昂贵"的操作.或许,作为回答的最后动机,我会写下一些案例,你可以就它们的成本给出一个意见:

  1. 使用"标题LIKE"从DB中选择N个项目(仅限ID)
  2. 使用"title.contains()"迭代200个项目的列表并仅使用匹配项
  3. 通过列表视图从arraylist SHOWN中删除100个项目
  4. 从未显示的arraylist中删除100个项目,然后连接并显示

感谢任何反馈,或任何不良做法的提示.特别可能的事件通过处理可见列表元素触发问题,而不是首先"在后台"执行,然后设置新的ListAdapter

performance android android-listview

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

流畅的NHibernate自动映射:将日期时间更改为时间戳

我正在(通过NHibernate的流畅界面)深入了解自动化.非常好,但我遇到了DateTimes的一个小问题.我需要将数据格式更改为时间戳,否则NHibernate会截断毫秒数.

我找到了几个信息来源,最好的信息来源是: AutoMapping Info 1他在哪里更改列名和属性类型.问题是,根据这份文件,流畅的自动化有所改变.

现在我无法弄清楚如何让自动化"改变类型".我尝试了下面的代码,但我被卡住了.同样,我想要做的只是告诉automapper:

使用DateTime的时间戳可以防止在使用自动化时截断毫秒.

有人有个主意吗?代码到目前为止:

   public class DateTimeToTimestamp : IClassConvention  
{  
    public bool Accept(IClassMap target)
    {
        return target.GetType() == typeof(DateTime);
    }

    public void Apply(IClassMap target)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

好的,非常感谢答案......这对我来说足够舒适.如果我真的有3个需要这种精度的类,我可以处理三次写入.特别是因为所有其他属性的映射仍然完美,并且以下代码仅替换我想要的一个属性...非常好!

如果有人知道更通用的方法,请随意添加它,但是现在,我很高兴!

我案件的代码是:

    public class DateTimeToTimestamp : IAutoMappingOverride<CustomTime>
{
    public void Override(AutoMap<CustomTime> mapping)
    {
        mapping.Map(x => x.ScanDate).CustomTypeIs("timestamp");
    }
}
Run Code Online (Sandbox Code Playgroud)

c# nhibernate fluent-nhibernate automapping

4
推荐指数
1
解决办法
6266
查看次数

流畅的NHibernate:防止类被映射

我相信这是小菜一碟,但我无法使用谷歌找到它.我需要从映射中排除一个类.我目前的配置是:

return Fluently.Configure()
      .Database(MsSqlConfiguration.MsSql2005.ConnectionString(c =>
                c.Is(@"Data Source=PC\SQLEXPRESS;......")))
            .Mappings(m =>
                m.AutoMappings.Add(
                AutoPersistenceModel.MapEntitiesFromAssemblyOf<Person2>()
                        .Where(t => t.Namespace == "ExampleData.HumansTest")
                        .UseOverridesFromAssemblyOf<PersonMappingOverrides>()
                        .ConventionDiscovery.AddFromAssemblyOf<PersonMappingOverrides>()
                        )
                     ).BuildConfiguration();
Run Code Online (Sandbox Code Playgroud)

到目前为止工作得很好......但我有一些我不想映射的课程.有什么像:

PSEUDO代码:

return Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2005.ConnectionString(c =>
                c.Is(@".......")))
            .Mappings(m =>
                m.AutoMappings.Add(
                AutoPersistenceModel.MapEntitiesFromAssemblyOf<Person2>()
                        .Where(t => t.Namespace == "ExampleData.HumansTest")
                        .DO_NOT_MAP_CLASS<UnfinishedClass>
                        .UseOverridesFromAssemblyOf<PersonMappingOverrides>()
                        .ConventionDiscovery.AddFromAssemblyOf<PersonMappingOverrides>()
                        )
                     ).BuildConfiguration();
Run Code Online (Sandbox Code Playgroud)

nhibernate fluent fluent-nhibernate

4
推荐指数
1
解决办法
1487
查看次数

C#随机代码 - 大部分都是错误的吗?

随机化列表我遇到了很多问题.我在谈论一个包含200个元素的列表,我希望将其列入清单.不要误会我的意思,我读了很多例子,乍一看有很好的东西,比如:

随机化List <T>

但根据我的经验,至少在快速机器上,这基本上是毫无价值的.改组运行得如此之快,以至于两次调用Random.NEXT()之间没有MS延迟,导致几乎不随机的行为.

我不是在谈论超级安全的东西,只是随机的基本游戏.我知道我可以添加1 MS的延迟,但这意味着"浪费"200 MS只是随机化一个列表.

现在我找到了这种方法:http://www.codinghorror.com/blog/2007/12/shuffling.html

看起来不错,使用GUID进行排序.但他们不是以同样的方式创造的吗?让我们提高一个档次,让我们假设我要创建1000个数字,介于0 - 5之间.这段代码基本没用:

        var resultA = new List<int>();
        for (int i = 0; i < 1000; i++)
        {
            resultA.Add(new Random().Next(5));
        }


        var resultB = new List<int>();
        for (int i = 0; i < 1000; i++)
        {
            resultB.Add(new Random().Next(5));
            Thread.Sleep(1);
        }
Run Code Online (Sandbox Code Playgroud)

A根本不起作用,至少不是我在Windows Phone 7中的环境.B很好,但它需要一秒钟,这也是愚蠢的.任何评论或想法,创建随机的整数列表都不是那么难:-)

c# random windows-phone-7

4
推荐指数
2
解决办法
2176
查看次数

IntelliJ - 如何教项目树不要"快捷"单个子文件夹

一个小问题,谷歌的搜索条件非常糟糕......

如果您在SRC文件夹(=包)中创建一个文件夹,并在其中创建一个类,一切都很好.如果你之后在课堂旁边创建了一个文件夹,那么一切都很好.

如果您在SRC文件夹中创建一个文件夹,然后在其中创建一个文件夹,IntelliJ会"连接"该路径,并且您无法访问该文件夹以在其旁边创建一个类. - 哇,没有例子就没办法理解这个:-)

创建文件夹A
创建文件夹AA
创建类AAc
创建文件夹AAB

一切都很好,没有问题导航......
但现在试试这个:

创建文件夹A
创建文件夹AA
创建文件夹AAB
创建类AAc

最后一点并不那么容易,没有办法再在树中达到AA,唯一可点击的选项是AAB(例如在其中创建一个类,它将是AABc)

我知道,写这个可能需要更长的时间,只需选择"在资源管理器中显示"并手动创建文件夹,但仍然,我相信它有一个开关:-)

intellij-idea

4
推荐指数
1
解决办法
1031
查看次数

跟踪PRISM/CAL事件(最佳实践?)

好,

这个问题适用于对PRISM有深入了解的人或者我缺乏的一些魔法技能.背景很简单:Prism允许声明用户可以订阅或发布的事件.在代码中,这看起来像这样:

  _eventAggregator.GetEvent<LayoutChangedEvent>().Subscribe(UpdateUi, true);
  _eventAggregator.GetEvent<LayoutChangedEvent>().Publish("Some argument");
Run Code Online (Sandbox Code Playgroud)

现在这很好,特别是因为这些事件是强类型的,声明是小菜一碟:

public class LayoutChangedEvent : CompositePresentationEvent<string>
{
}
Run Code Online (Sandbox Code Playgroud)

但现在是困难的部分:我想以某种方式追踪事件.我有想法使用lambda表达式订阅调用简单的日志消息.在WPF中工作得很好,但在Silverlight中有一些方法访问错误(花了我一些时间来弄清楚原因)..如果你想亲眼看看,请在Silverlight中尝试:

eA.GetEvent<VideoStartedEvent>().Subscribe(obj => TraceEvent(obj, "vSe", log));
Run Code Online (Sandbox Code Playgroud)

如果这是可能的,我会很高兴,因为我可以使用一行来轻松跟踪所有事件进行订阅.但它没有...替代方法是为每个事件编写不同的函数,并将此函数分配给事件.为什么功能不同?好吧,我需要知道哪个事件发布了.如果我对两个不同的事件使用相同的函数,我只将有效负载作为参数.我现在可以找出导致跟踪消息的事件.

我试过了:

  • 使用Reflection获取导致事件(不工作)
  • 在事件中使用构造函数来使每个事件能够跟踪自己(不允许)

还有其他想法吗?克里斯

PS:写这篇文章花了我很可能比为我的20个事件编写20个函数更长,但我拒绝放弃:-)我只是想使用postharp,这很可能会工作(虽然我不确定,也许我最终只有关于基类的信息)..棘手和如此不重要的话题......

c# events prism

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

将接口解析为UIElement(Unity,PRISM,C#)

使用PRISM时,使用unity来连接事物的正常方法是定义一个接口并使用此接口注册一个实现.现在,我对视图有疑问.场景很简单:

假设允许设置播放命令的自定义视频控件.该控件由简单的接口"IPlayControlView"定义.显而易见的问题是,当我解决此控件并尝试将其添加到a时StackPanel,它不起作用,因为我有一个IPlayControl,而不是一个UIElement.

我可以投它UIElement,因为我知道它是一个UIElement.但有没有更好的方法,比如

public interface IPlayControlView : UIElement
Run Code Online (Sandbox Code Playgroud)

这不起作用,但也许其他一些事情会起作用......

这是一个普遍的问题,如果我使用接口解析视图,我每次都会遇到这个问题.也许它不是它的方式,但我一直认为其中一个....好吧,只是有个主意.我将只使用一个属性UIElement扩展IPlayControl,并将其设置为对自身的引用.所以,没关系,问题在打字时回答:-)

如果有更好的方法,我总是喜欢学习新事物.也许是IUIElement?

克里斯

c# views interface unity-container uielement

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

ILogger _logger.Debug("Something") - 编译器有什么方法可以删除它?

我有一个非常常见的场景,即自我实现的ILogger接口.它包含几个方法,如_logger.Debug("Some stuff")等.该实现由LoggingService提供,并以正常方式在类中使用.

现在我有一个关于性能的问题,我正在为Windows Phone 7写作,而且由于这些设备的功能有限,所以很少有事情可能很重要.

我不想:

  • 在每行上包含一个预编译器指令,如#IF DEBUG
  • 使用像log4net这样的条件,例如_logger.DebugEnabled

我看到它的方式,在发布版本中,我只返回NullLoggers,它包含一个空接口的实现,什么都不做.

问题是:编译器是否识别出这样的事情(可能很难,他在编译时无法知道我分配的记录器).有什么方法可以给.NET提示吗?

我的问题的原因,我知道进入一个空函数不会造成很大的延迟,没有问题.但是我的应用程序的源代码中有很多字符串,如果它们从未使用过,它们实际上并不需要成为我的应用程序的一部分......

或者我是否过度思考一个小问题(也许"字符串 - 代码"比率在我的代码编辑器中看起来很糟糕,而且无论如何都没什么大不了的)

谢谢你的提示,
克里斯

c# performance logging windows-phone-7

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