小编Con*_*cer的帖子

WPF,MVVM,ICommand和存储库

我有一个看起来像这样的WPF应用程序:

在此输入图像描述

viewmodel包装模型并通过INotifyChanged公开与视图相关的任何属性.该视图还绑定到几个ICommand对象,这些对象处理由视图触发的某些行为.我有一个外部ICommand,其唯一目的是将模型保存到数据库中.

我读过的所有内容都表明视图或视图模型都不应该引用存储库.这就是命令3在视图模型之外的原因.

我的问题是双重的.首先,这是一个合理的架构,其次,什么是将模型实例转移到命令3以便将其放入存储库的好方法?

c# wpf repository mvvm

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

将System.DateTime转换为NodaTime.ZonedDateTime

我有一个System.DateTime已经在特定时区但未指定DateTime.Kind的字符串和表示IANA时区的字符串.我想将其转换为NodaTime.ZonedDateTime.

例如:

var original = new DateTime(2016, 1, 1, 12, 0, 0);
var timezone = "America/Chicago";
Run Code Online (Sandbox Code Playgroud)

我想要一个ZonedDateTime代表01/01/2016 - 芝加哥时间12点的节目.我该怎么做呢?

c# nodatime

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

带MVVM模式的WPF MessageBox?

假设我想向用户显示一些验证错误.在MVVM模式中,我可以有一个标签绑定到我的viewmodel上的某个属性.但是,如果我想在严格遵守MVVM模式的同时显示消息框,该怎么办呢?我的viewmodel会绑定什么,以及它将如何触发创建/显示消息框?

.net c# wpf messagebox mvvm

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

添加新项目后立即添加新行

我有一个像这样的数据网格:

<DataGrid
    ItemsSource="{Binding Things}" 
    AutoGenerateColumns="False">

    <DataGrid.Columns>
        <DataGridTextColumn Header="Whatever" Binding="{Binding Blah}" />
    </DataGrid.Columns>     
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

事物和事物看起来像这样:

public ObservableCollection<Thing> Things { get; set; }
Run Code Online (Sandbox Code Playgroud)

.

public class Thing
{
    public string Blah { get; set; }

    public Thing() { }
}
Run Code Online (Sandbox Code Playgroud)

数据网格的默认行为是在底部以一个新的空行开始。当我开始编辑该行的任何属性时,会创建一个新事物并将其添加到事物集合中。然而,直到我完成编辑(即按回车按钮或选择新的行/列)才会显示新的空行。有没有一种方法(最好是不违反 MVVM 的方法)在我开始编辑后立即显示这个新的空行?

这是起点:

初始点

这是在双击空白行并编辑之后:

编辑

当我完成编辑时,会出现一个新的空行:

新建空行

但这是我想要的(编辑时新建空白行):

编辑时新建空行

c# wpf datagrid

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

不要每次都使用DataTemplate / DataType创建新视图

我有这样的事情:

<Window>
    <Window.Resources>
       <DataTemplate DataType="{x:Type local:VM1}">
          <!-- View 1 Here -->
       </DataTemplate>

       <DataTemplate DataType="{x:Type local:VM2}">
          <!-- View 2 here -->
       </DataTemplate>
    <Window.Resources>

    <ContentPresenter Content="{Binding}"/>
</Window>
Run Code Online (Sandbox Code Playgroud)

当我绑定不同的视图模型时,这将自动交换视图,这非常方便。

但是,我有一个带有tabcontrol和许多子视图的视图。每个子视图都有几个可视部分,这些可视部分由自定义xml文件配置(复杂的业务案例)。每次创建此视图时,都会解析xml文件,这会导致较小的延迟(1-2秒)。烦人并使UI呆滞足以延迟。

有没有一种方法可以使用DataTemplate模式而无需每次绑定视图模型时都销毁和重新创建视图?如果可能,我宁愿不更改视图模型。

c# wpf datatemplate

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

为什么除法结果会根据演员类型而有所不同?(跟进)

这是这个问题的后续问题:为什么除法结果会根据演员类型而有所不同?

快速摘要:

byte b1 = (byte)(64 / 0.8f); // b1 is 79
int b2 = (int)(64 / 0.8f); // b2 is 79
float fl = (64 / 0.8f); // fl is 80
Run Code Online (Sandbox Code Playgroud)

问题是:为什么结果会根据演员类型而有所不同?在制定答案的过程中遇到了一个我无法解释的问题.

var bytes = BitConverter.GetBytes(64 / 0.8f).Reverse(); // Reverse endianness
var bits = bytes.Select(b => Convert.ToString(b, 2).PadLeft(8, '0'));
Console.WriteLine(string.Join(" ", bits));
Run Code Online (Sandbox Code Playgroud)

这输出如下:

01000010 10100000 00000000 00000000
Run Code Online (Sandbox Code Playgroud)

以IEEE 754格式分解:

0 10000101 01000000000000000000000
Run Code Online (Sandbox Code Playgroud)

标志:

0 => Positive
Run Code Online (Sandbox Code Playgroud)

指数:

10000101 => 133 in base 10
Run Code Online (Sandbox Code Playgroud)

尾数:

01000000000000000000000 => 0*2^-1 + …
Run Code Online (Sandbox Code Playgroud)

c# floating-point

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

Quartz.net交易?

有没有办法控制 Quartz.net 使用的交易?

我们使用 Quartz 来调度作业,但我们将有关作业的元数据以 UI 更易读的格式保存在单独的表中。显然,如果在安排石英作业之后但在我们将元数据写入另一个表之前网络发生故障,那就很糟糕了。我想将所有内容都包含在交易中,但我不知道如何让石英使用它。支持吗?

quartz.net

5
推荐指数
0
解决办法
653
查看次数

使用SelectionMode = Extended选择列表框

对于模糊的标题感到抱歉,我无法想出一个总结正在发生的事情的好方法.

我有一个绑定的WPF列表框:

<UserControl.Resources>
    <DataTemplate DataType="{x:Type local:MyBoundObject}">
        <TextBlock Text="{Binding Label}" />
    </DataTemplate>
</UserControl.Resources>

<ListBox ItemsSource="{Binding SomeSource}" SelectionMode="Extended">
    <ListBox.ItemContainerStyle>
        <Style TargetType="{x:Type ListBoxItem}">
            <Setter Property="IsSelected Value="{Binding Path=IsSelected, Mode=TwoWay}"/>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>
Run Code Online (Sandbox Code Playgroud)

我想只对所选项目进行操作.我这样做是通过遍历所有项目的列表并检查每个对象来查看是否设置了IsSelected属性.

除了当我在列表中有很多项目(足够,所以它们不是全部可见)时,这是有效的,我按CTRL-A选择所有项目.当我这样做时,所有可见项的IsSelected属性都设置为true,其余所有项都保留为false.一旦我向下滚动,其他项目就会进入视图,然后它们的IsSelected属性将设置为true.

有没有办法解决这种行为,以便当我按CTRL-A时,每个对象的IsSelected属性都设置为true?

c# wpf listbox

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

Servlet到jsp通信的最佳实践

我正在学习如何在google app引擎上编写java servlet和jsp页面.我正在尝试使用MVC模型,但我不确定我是否正确行事.目前,我有一个访问页面时调用的servlet.servlet执行所有处理并创建一个HomePageViewModel对象,该对象被转发到jsp,如下所示:

// Do processing here
// ...
HomePageViewModel viewModel = new HomePageViewModel();
req.setAttribute("viewModel", viewModel);

//Servlet JSP communication
RequestDispatcher reqDispatcher = getServletConfig().getServletContext().getRequestDispatcher("/jsp/home.jsp");
reqDispatcher.forward(req, resp);
Run Code Online (Sandbox Code Playgroud)

在jsp方面,我有这样的事情:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="viewmodels.HomePageViewModel" %>
<%
  HomePageViewModel viewModel = (HomePageViewModel) request.getAttribute("viewModel");
  pageContext.setAttribute("viewModel", viewModel);
%>

<html>
  <body>
  <% out.println(((HomePageViewModel)pageContext.getAttribute("viewModel")).Test); %>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

所以我的问题是双重的.首先,这是为小型webapp做事的合理方式吗?这只是我正在上课的一个小项目.第二,在jsp文件中,是否有更好的方法来访问viewmodel数据?

model-view-controller jsp servlets

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

将本地存储库添加到maven settings.xml

我的机器上有一个本地存储库.我需要将它添加到maven的settings.xml中.我在网上找到的所有例子都是这样的:

<settings>
  <profiles>
    <profile>
      <id>myprofile</id>
      <repositories>
        <repository>
          <id>androidsupport</id>
          <name>Android Support</name>
          <url>http://www.whatever.com/maven2/</url>
        </repository>
     </repositories>
    </profile>

      <activeProfiles>
        <activeProfile>myprofile</activeProfile>
      </activeProfiles>
  </profiles>
</settings>
Run Code Online (Sandbox Code Playgroud)

我需要将它指向当地的回购.我怎样才能做到这一点?

maven

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