小编Bob*_*way的帖子

WPF DataGrid - 即使SelectedItem是绑定属性,也要突出显示所选行

我有一个WPF DataGrid,其中SelectedItem绑定到ViewModel属性.

SelectedItem="{Binding DataContext.SelectedBooking, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" 
Run Code Online (Sandbox Code Playgroud)

如果用户点击一行,选择它,唯一的可视线索是该行的灰色背景变得非常轻微.我需要让这个更明显,所以我尝试单独添加这些:

<DataGrid.RowStyle>
    <Style TargetType="{x:Type DataGridRow}">
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Foreground" Value="Red"/>
                <Setter Property="Background" Value="Red" />
            </Trigger>
        </Style.Triggers>
    </Style>
</DataGrid.RowStyle>
Run Code Online (Sandbox Code Playgroud)

<DataGrid.Resources>
    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red"/>
</DataGrid.Resources>
Run Code Online (Sandbox Code Playgroud)

结果是一样的.当用户单击一行时,它会非常短暂地闪烁红色,然后返回到淡灰色,尽管Row实际上仍然是被选中.如果他们第二次点击它,它会变红并保持红色.

如果我删除SelectedItem上的Binding,它按预期工作.无论Binding如何,我怎样才能完成这项工作?

c# wpf datagrid

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

Visual Studio使用MVC5和Razor突出显示.cshtml页面中不存在的错误

此问题之前已被问过数百次,但所提出的解决方案似乎都没有效果.

我正在Visual Studio 2013中构建一个MVC5项目.它运行正常.但是,在VS中的所有.cshtml页面中,所有内联Razor代码都用红色下划线,好像这是一个错误.@modelViewBag声明它们在当前背景下不存在.Html.ActionLink声明它不包含ActionLink的定义.不同对象上还有其他错误,并且智能感知被破坏.

构建项目时也会显示这些错误.奇怪的是,我们已经在TFS上进行了一次门禁登记,并且它的构建就好了.

MVC和Razor通过NuGet安装.Nuget告诉我,MBC的版本是5.2.3,安装的Razor版本是3.2.3.

Views文件夹中有一个web.config文件,它看起来像这样:

  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization"/>
        <add namespace="System.Web.Routing" />
        <add namespace="MyProjectNamespace" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

  <appSettings>
    <add key="webpages:Enabled" value="false" />
  </appSettings>
Run Code Online (Sandbox Code Playgroud)

主web.config文件中包含以下部分:

<dependentAssembly> …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc razor

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

在dotnet中查找缓慢/无效的方法调用

我在一些遗留代码中遇到了一大堆旧的方法调用,其中一个或一些正在制造瓶颈并且确实减慢了速度.有没有快速的方法我可以获得一个报告,说明哪些方法调用花费时间,没有在调试中运行,单步执行并查看光标暂停的位置?

.net

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

将Linq ObjectQuery IQueryable转换为IEnumerable

完全混淆了这里所需的数据类型.

我有这个Linq声明:

                var feat = AllCustomers
                    .Select(c => c.CustomerServices.SelectMany(cs => cs.CustomerServiceFeatures)
                    .SelectMany(csf => csf.ConfigElements).Where(ce => ce.Name == "ItemType").Select(ce => ce.Value).Distinct());
Run Code Online (Sandbox Code Playgroud)

它返回所需的数据,VS告诉我该类型被设置为:

System.Data.Objects.ObjectQuery<System.Collections.Generic.IEnumerable<string>>
Run Code Online (Sandbox Code Playgroud)

但是我想将这些数据添加到字符串列表中:

 List<string> itemTypes = new List<string>();
 itemTypes.AddRange(feat);
Run Code Online (Sandbox Code Playgroud)

但这会引发错误:

 Argument 1: cannot convert from 'System.Linq.IQueryable<System.Collections.Generic.IEnumerable<string>>' to 'System.Collections.Generic.IEnumerable<string>'   
Run Code Online (Sandbox Code Playgroud)

我找不到强制转换为正确类型所需的语法.有人可以帮忙吗?

干杯,马特

linq

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

在Web项目中托管WCF服务

我正在尝试在ac#mvc web项目中创建一个wcf服务.我添加了一个"WCF服务"类型的新项目,并在提供的接口中添加了一个测试方法:

[ServiceContract]
public interface ITest
{
    [OperationContract]
    void DoWork();

    bool testWorking();
}
Run Code Online (Sandbox Code Playgroud)

并提供的服务:

public class Test : ITest
{
    public void DoWork()
    {
    }

    public bool testWorking()
    {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我转到web.config文件并将以下内容添加到system.ServiceModel标记:

 <services>
      <service name="Test" behaviorConfiguration="MyServiceTypeBehaviors">
        <endpoint address="" binding="wsHttpBinding" contract="ITest">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex"  binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors" >
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
Run Code Online (Sandbox Code Playgroud)

在这一点上,据我所知,我应该能够在浏览器中查看这个并获得测试消息告诉我,这是我实现客户端使用此服务的时间.然而,实际发生的是我的浏览器下载.svc文件!

两个问题:

1)我到底做错了什么?为什么我没有看到预期的消息?

2)有什么办法可以自动启动WCF测试工具来运行这项服务吗?我能找到的唯一指导方针是从WCF项目开始.

更新:( svc文件的内容 - 从评论中抓取)

<%@ ServiceHost Language="C#" Debug="true" 
    Service="myemployersaddress.com.Test" CodeBehind="Test.svc.cs" %> 
Run Code Online (Sandbox Code Playgroud)

.net wcf

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

构建软件工程技能的资源

如果这个问题对于网站来说过于开放,请道歉,但它似乎是最好的问题.

我是一名自学成才的程序员,在他的教育背景下几乎没有数学,并且在十年的职业生涯中,他从前端的Web脚本和Web开发慢慢地转向中级和数据级软件工程.因此,我的知识和经验方面有些缺乏.

在我最近与我的经理进行了一次审核之后,有人告诉我,克服这些差距就是我和升级到高级工程师角色之间的所有差距.然而,为了达到这个目的,我将不得不为自己找到一种结构化的学习方法,并证明我已经接受了我需要知道的东西.

我个人认为我的弱点如下.请注意,很多情况下的问题并不是我从技术上理解这些事情是如何工作的,而是我不知道应用它们在哪里或不适合它们.例如,我知道接口是什么,从技术上讲,它知道它做了什么,但是我很难区分什么时候使用接口,比如说,从一个基类继承的一组相关的OO类.因此,对于良好的软件设计而言,它比对技术的无知更为无知 - 我很难理解,消化和处理松耦合系统等问题.

  • 接口
  • 代表
  • 设计模式
  • 网络架构和协议

此外,我从来没有做过一些像编译器这样的低级东西.我有时想知道,如果我对编写代码的能力有很大的不同,那么如果我对这种材料有了更好的了解,那么代码不仅有效而且优化得很好.

有时候担心我无法识别我的技能组合中的弱点,因为我不知道如何提出正确的问题.所以,希望我能正确地解决问题,我希望你的建议如下:

  • 从我目前缺乏的声音是否还有其他任何我应该考虑的主题?
  • 学习这些材料的一些好资源在哪里?
  • 是否有任何结构化,自学成才的课程,我可以通过相关的工作?遗憾的是,我没有时间进行正式的资格认证.

干杯,马特

architecture

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

重构WPF MVVM以提高可测试性

我继承了一个功能但很混乱的WPF MVVM应用程序.令我烦恼的是,几乎没有任何单元测试使得采用MVVM有点毫无意义.所以我决定添加一些.

在抓住了悬而未决的果实后,我开始陷入困境.有很多高度相互依赖的代码,特别是在Views中使用的属性和方法中.例如,一次呼叫引发一系列"财产变化"事件,这反过来引发其他呼叫等等.

这使得测试非常困难,因为您必须编写大量的模拟并设置大量属性来测试单个函数.当然,每个类只需要执行一次,然后在每次测试中重复使用mock和ViewModel.但它仍然是一种痛苦,这让我觉得这是错误的做事方式.当然,尝试打破代码并使其更加模块化会更好.

我不确定MVVM中有多么现实.而且我处于恶性循环中,因为没有良好的测试,我担心通过重构编写好的测试来打破构建.事实上它是WPF MVVM是另一个问题,因为没有任何东西跟踪View和ViewModel之间的相互依赖性 - 粗心的名称更改可能会完全破坏某些东西.

我正在使用C#VS2013并抓住ReSharper的试用版,看看它是否会有所帮助.使用起来很有趣,但到目前为止还没有.我的单元测试经验并不多.

那么 - 我怎样才能合理,有条不紊地安全地处理这个问题呢?我如何使用现有工具(并查看任何其他工具)来提供帮助?

wpf resharper refactoring unit-testing mvvm

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

运行缓慢的 MySql 还原 - 比备份速度慢 10 倍,但仍在运行

我正在将一个大型(~80GB)数据库从它的测试平台移到它的生产环境中。我们正在研究 Windows 服务器。这是我们第一次使用 MySQL,我们仍在学习预期的行为。

我们备份了数据

mysqldump -u root -p --opt [database name] > [database name].sql
Run Code Online (Sandbox Code Playgroud)

这花了大约 3 个小时并创建了一个 45GB 大小的文件。它在一夜之间复制到它的新家,第二天早上,我使用 MySQL Workbench 启动了恢复。根据其日志,它运行

mysql.exe --defaults-file="[路径]\tmpc8tz9l.cnf" --protocol=tcp --host=127.0.0.1 --user=[me] --port=3306 --default-character-set =utf8 --comments --database=[数据库名称] < "H:\[数据库名称].sql"

它正在工作 - 如果我连接到实例,我可以看到数据库和它的一些表。

问题是,它似乎需要永远。我认为它会在与备份相同的 3-4 个时间范围内恢复,可能更快,因为它正在恢复到具有 SSD 驱动器的更强大的服务器上。

但是现在已经过了大约 36 个小时,因为恢复开始了,而且 DB 的大小显然是 30GB。随着它的进行,它似乎变得越来越慢。

现在它已经开始工作了,我不想打断它,所以我想我只需要等待。但供日后参考:这种蜜糖缓慢的恢复速度正常吗?下次我们需要恢复大数据库时,我们可以做些什么来改善问题?

mysql database restore database-restore

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

是什么导致 SignInManager.SendTwoFactorCodeAsync 返回 false?

关于新的 Microsoft Identity Framework 的文档似乎有点稀少。我目前正在修改标准项目模板,在尝试使用双因素身份验证登录用户时遇到了一些奇怪的行为。

我们只允许通过 SMS 进行 2FA,所以我绕过了让用户选择他们想要的代码方式的选项。相反,当具有 2FA 和经过验证的电话号码的用户尝试登录时,他们会触发以下代码:

var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true);
switch (result)
{
    case SignInStatus.RequiresVerification:
        if (!await SignInManager.SendTwoFactorCodeAsync("Phone Code"))
        {
            TempData["ErrorMessage"] = "We could not verify your account. Please try again.";
            return RedirectToAction("Error", "Error");
        }
        return RedirectToAction("VerifyCode", new { Provider = "Phone Code", ReturnUrl = returnUrl, RememberMe = model.RememberMe });
    // other cases
}
Run Code Online (Sandbox Code Playgroud)

大多数情况下,这工作正常。但是在用户注销后,他们第一次重新登录时,SendTwoFactorCodeAsync返回 false 并且他们被定向到错误页面。

哪些情况会导致SendTwoFactorCodeAsync首次调用已注销用户时始终失败?

c# asp.net asp.net-mvc owin

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

为什么LINQ不喜欢内联日期计算?

这个涉及DateTime计算的LINQ表达式编译得很好:

var jobsSinceLastRun = _rep.GetJobs(j => j.CompletedDate > DateTime.Now.AddMonths(-1));
Run Code Online (Sandbox Code Playgroud)

但是当你尝试运行它时,会抛出一个错误:

LINQ to Entities无法识别方法'System.DateTime AddMonths(Int32)'方法,并且此方法无法转换为存储表达式.

很容易修复:

DateTime oneMonthAgo = DateTime.Now.AddMonths(-1);
var jobsSinceLastRun = _rep.GetJobs(j => j.CompletedDate > oneMonthAgo);
Run Code Online (Sandbox Code Playgroud)

但这容易让我想知道幕后是什么导致LINQ拒绝内联计算?抽象的哪个部分失败了?

c# linq

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