小编Gor*_*ran的帖子

MVVM在ViewModel中复制模型属性

似乎有一个指导,模型不应该将其实体暴露给View,并且所有必需的属性都应该在ViewModel中重复

例:

Product
Id {get; set;}
Name {get; set;}
.......


ProductViewModel : ViewModelBase
Id {get; set;}
Name {get; set;}
.......
Run Code Online (Sandbox Code Playgroud)

为什么需要这个?我可以理解,如果Model没有实现INPC,但如果确实如此,那么我觉得这很不必要.

mvvm

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

OnModelCreating - 强制新创建

在某些情况下,在应用程序运行期间,我需要打开身份插入:

modelBuilder.Entity<Activity>().Property(p => p.Id).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None);
Run Code Online (Sandbox Code Playgroud)

但是,由于OnModelCreating只执行一次,实现这一目标的最佳方法是什么?是否有可能重建模型?

entity-framework ef-code-first entity-framework-5

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

设置内容控件的背景

<UserControl .....>
  <DataTemplate DataType="{x:Type vm:AViewModel}">
    <vw:AView />
  </DataTemplate>

  <DataTemplate DataType="{x:Type vm:BViewModel}">
    <vw:BView />
  </DataTemplate>

  <ContentControl x:Name="chartScreen" Content="{Binding Screen}" Background="Yellow" />
</UserControl>
Run Code Online (Sandbox Code Playgroud)

从上面的代码中可以看出,ContentControl通过绑定到ViewModel的Screen属性来设置其内容.Screen属性将返回AViewModel或BViewModel的实例,具体取决于某些条件.问题是,当在屏幕上加载UserControl时,Screen属性为null,因此还没有设置内容.此时,我想为ContentControl设置一些背景,但我找不到如何做到这一点的方法?背景="黄色"什么都不做......

任何想法如何设置ContentControl的背景?即使内容显示AView或Biew,也应该始终应用此背景,或者为null.

wpf wpf-controls

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

MVVM中的异步命令执行

我想知道为什么MVVM光缺少命令与异步执行?我相信在很多情况下这可能会有用,所以让我说一个.

假设我们的UI包含一个包含多个屏幕的容器.用户可以关闭特定屏幕或具有多个屏幕的容器.假设用户已在容器上发出了关闭命令.返回的容器在每个屏幕上调用close命令,它需要等待屏幕关闭.实际上,这可能意味着验证数据.因此,我们需要发出异步调用以防止UI变得无响应,我们还需要等待任务完成,才能继续.

所以,如果我们在Command中有这样的东西

public RelayCommand CloseCommand
{
    get { return _closeCommand ?? _closeCommand = new RelayCommand( async () =>
    {
        foreach (var screen in Screens)
        {
            if (!await screen.CloseCommand.ExecuteAsync(null))
            {
                // do something
            }
        }
    }) }

}
Run Code Online (Sandbox Code Playgroud)

我们还可以在屏幕上公开其他方法,但在我看来它应该是RelayCommand的任务,因为它已经存在于那里.

或者有一种不同的方法来处理这种情况?

mvvm mvvm-light

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

是否建议WCF与WPF和MVVM一起使用以从SQL Server检索数据?

我正在构建一个桌面应用程序,它将在本地网络上使用SQL Server作为数据库。

此应用程序将同时拥有约50个用户。在哪种情况下我需要使用WCF服务?是否建议在要驻留数据库的服务器计算机上创建WCF服务,以便我们通过WCF服务连接到该服务器,而不是直接连接到数据库?建议使用什么方式连接到SQL Server数据,为什么?

编辑:让我更详细地解释。我以前使用过WCF Ria服务,所以我知道它们是如何工作的。让我们假设WCF服务以相同的方式工作。问题是针对为什么我们要使用WCF而不是直接连接到数据库?我不想指定我当前的应用程序要求,因为我将获得针对特定要求的特定答案。我的目标是大致了解为什么以及何时选择一个而不是另一个。到目前为止,我已经收到令人满意的答复。

在我看来,普遍共识是仅在需要另一种类型的应用程序时才使用WCF,该应用程序将使用Web访问从服务中获取数据。同样,如果我正确理解的话,从安全性的角度来看,两者之间没有区别。

将来会出现一个统计应用程序,该应用程序将使用Web向用户提供只读统计信息,并且自然会为此任务需要一些服务(应用程序没有特定的客户端,它将提供给许多客户端)。由于我需要针对特定​​客户快速完成一些演示应用程序,因此我在考虑忽略服务部分,并进行适当的分层(WPF-> VM-> Model-> EF,因此稍后我将在模型和EF。我认为使用插入层运行WPF应用程序应该花不了太多时间,我也推迟了该服务,原因如下:由于HTML5是(将要成为)Web的主要技术,并且有SL可能会被废弃为技术(我一直在使用),因此合理的决定是选择HTML5而不是SL5。

sql-server wpf wcf

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

EF CodeFirst在保存更改时处理数据库异常

由于EF不支持唯一键约束,因此我们需要在Save方法期间捕获异常,并向用户显示错误消息.

这种方法的问题是:

  • 我们怎么知道哪条记录引发了异常
  • 我们怎么知道什么样的问题引发了异常(例如,我可以在同一条记录上有两个独特的约束,所以我需要告诉用户哪一个被破坏了)

DBMS是SqlServer 2008.

如何解决这些问题?

entity-framework entity-framework-4 ef-code-first

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

Linq with DynamicObject

我有List MyBox:DynamicObject.MyType继承自DynamicObject的原因是我需要一个可以包含未知数量属性的类型.

一切正常,直到我需要过滤List.有没有办法可以做一个像这样做的linq:

return all items where any of the properties is empty string or white space?
Run Code Online (Sandbox Code Playgroud)

linq dynamic c#-4.0

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

在内容中制作带有矢量图形的按钮

我是WPF设计(和一般设计)的新手,我需要一个任务的帮助.

我有一个按钮的样式,其中包含一个Path中的一些数据,它在其上绘制一个图标(基本上是简单的添加新图标).现在我想制作一个复制图标.

我找不到用Blend中的Path操作的方法,所以我想到的是:

1)复制路径数据,这样我们就可以绘制两个图标(在内容中有两个Path对象)2)先向左移动一小部分向上移动3)向右移动一小部分向右移动4)使第二个重叠第一个

这就是我所做的:因为我们不能为Content设置两个元素,所以我添加了一个Grid元素,并在内部复制了Path元素两次.然后我重新定位了两个路径来模拟重复数据.

<Setter Property="Content">
    <Setter.Value>
    <Grid>
            <Path Data="..." Margin="10" Stretch="Fill" Fill="{StaticResource IconBrush}" RenderTransformOrigin="0.5,0.4">
                <Path.RenderTransform>
                    <TransformGroup>
                <ScaleTransform />
                <SkewTransform />
                <RotateTransform Angle="-90" />
                <TranslateTransform />
            </TransformGroup>
        </Path.RenderTransform>
    </Path>
    <Path Data="..." Margin="10" Stretch="Fill" Fill="{StaticResource IconBrush}" RenderTransformOrigin="0.5,0.6">
                <Path.RenderTransform>
            <TransformGroup>
                <ScaleTransform />
                <SkewTransform />
                <RotateTransform Angle="-90" />
                <TranslateTransform />
            </TransformGroup>
        </Path.RenderTransform>
    </Path>                                 
    </Grid>
    </Setter.Value>
</Setter>
Run Code Online (Sandbox Code Playgroud)

问题:我没有与第二个图标重叠(基本上一切都是透明的.这意味着我可能需要在第一个图标上删除一些点,但我无法在Blend中实现这一点?

任何人都可以分享一些如何实现我的需求吗?

wpf expression-blend

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

MVVM架构中的App.Config

每个应用程序都包含一些可配置的设置。这些设置或多或少可以分为两类:

  1. 应用程序的外观:示例可以是窗口位置、窗口大小、视图上的默认选项等。
  2. 业务规则:这些设置将由业务逻辑使用。

在我实现的架构中,View 有自己的项目(WPF),ViewModel 有自己的项目(类库)。从专业角度来看,View应该负责加载/保存视图相关设置,ViewModel应该负责加载/保存业务设置。

视图设置很容易处理。在设置(app.config)中创建所需的属性,您可以轻松加载保存它们。

但是,ViewModel 无法通过 View 项目中可用的内置机制访问 app.config 设置。

我的第一个想法是创建一些辅助方法,允许我从 ViewModel 读取/写入 app.config 中的设置。你有什么意见?我是否使事情变得复杂,或者这是处理应用程序设置的可接受的方式?

wpf mvvm

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

多对多的关系检测变化

我试图理解为什么DbContext没有检测到多对多关系中的变化.这是我在模型配置中设置的:

this.Configuration.ValidateOnSaveEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
this.Configuration.LazyLoadingEnabled = false;
Run Code Online (Sandbox Code Playgroud)

这是测试代码:

var book = Context.Set<Book>().Where(b => b.Id == 1).Single();
var author = Context.Set<Author>().Where(a => a.Id == 2).Single();

book.Authors.Add(author);
Run Code Online (Sandbox Code Playgroud)

如果我检查更改,它不报告任何:

// returns false
_context.ChangeTracker.Entries().Any(e => e.State == EntityState.Added || e.State == EntityState.Modified || e.State == EntityState.Deleted);
Run Code Online (Sandbox Code Playgroud)

如果我保存更改,则更改会正确更新到数据库.

// 1 record added to BookAuthors table
_context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

为什么DbContext没有跟踪多对多的变化?WCF不涉及,这是与Sql server的直接连接.

entity-framework entity-framework-4 ef-code-first

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