小编Ben*_*Ben的帖子

将值添加到'System.Windows.Controls.ItemCollection'类型的集合中引发异常

我的WPF应用程序出了问题,我不明白为什么.我远不是XAML的专家,我不明白这个错误,甚至代码的哪一部分都在抛出错误.

我有以下观点:

<DataGrid BorderThickness="0" Width="Auto" AutoGenerateColumns="False" AlternationCount="2"
          IsSynchronizedWithCurrentItem="True" AutomationProperties.AutomationId="PositionSummaryGrid" 
          ItemsSource="{Binding Path=BOEList}" RowDetailsVisibilityMode="VisibleWhenSelected">
    <DataGrid.Columns>
        <DataGridTextColumn Header="BOE Reference" Binding="{Binding Path=Reference}"/>
        <DataGridTextColumn Header="Account No" Binding="{Binding Path=AccountNo}"/>
        <DataGridTextColumn Header="LBL Invoice No" Binding="{Binding Path=InvoiceNo}"/>
        <DataGridTextColumn Header="Date Raised" Binding="{Binding Path=DateRaised}"/>
        <DataGridTextColumn Header="Value" Binding="{Binding Converter={StaticResource currencyConverter}, Path=Value}" Width="85"/>
        <DataGridTextColumn Header="Bank Charges" Binding="{Binding Converter={StaticResource currencyConverter}, Path=BankCharges}" Width="85"/>
        <DataGridTextColumn Header="Payment Due" Binding="{Binding Converter={StaticResource currencyConverter}, Path=PaymentDue}" Width="85"/>
        <DataGridTextColumn Header="Description" Binding="{Binding Path=Description}" Width="auto"/>
    </DataGrid.Columns>
    <DataGrid.RowDetailsTemplate>
        <DataTemplate>
            <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Payments}">
                <DataGridTextColumn Header="Payment Date" Binding="{Binding PaymentDate}"/>
                <DataGridTextColumn Header="Payment Amount" Binding="{Binding Converter={StaticResource currencyConverter}, …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml exception

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

WPF数据网格打印 - 与组分页

我一直试图让这个工作一段时间,我没有运气.我有一个数据网格(虽然这可以改为任何东西,如果它使它更容易),其中包含一长串项目.

我想要做的是打印出这个项目列表,保留分组和组头,但是我无法找到任何解决这个问题的方法,因为所有的例子和解决方案都只是将数据源转换成一个表,这个dosn保持分组.

我尝试了几种解决方案,例如:http: //www.codeproject.com/Articles/138233/Custom-Data-Grid-Document-Paginator

但是,我不确定datagrids的结构是否可以修改源以包含组.我希望,因为这似乎是一个非常普遍的想法,可以建议一些现有的解决方案.

c# wpf datagrid pagination

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

Crystal Reports - 值不能为空.参数名称:window

我最近在尝试通过对话框将水晶报表形式加载到我的WPF应用程序时遇到了一个异常错误,报告显示为加载几秒钟然后抛出错误,指出" 值不能为空.参数名称:窗口 "

这让我很困惑,据我所知,水晶报告不使用名为window的参数.

这是我的代码:

一个简单的窗口 CrystalReportsViewer

<Window x:Class="Client.Views.ReportsWindowView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:SAPBusinessObjects.WPF.Viewer;assembly=SAPBusinessObjects.WPF.Viewer"
    Title="ReportsWindowView" Height="300" Width="300" Loaded="Window_Loaded">
<Grid>
    <my:CrystalReportsViewer ShowOpenFileButton="True" Grid.Column="1" x:Name="ReportView"/>
</Grid>
Run Code Online (Sandbox Code Playgroud)

并从后面的代码加载报告(为了简单起见,我删除了标准的ConnectionInfo代码)

 cryRpt = new ReportDocument();
 cryRpt.Load("report.rpt");
 ReportView.ViewerCore.ReportSource = cryRpt;
Run Code Online (Sandbox Code Playgroud)

c# wpf crystal-reports

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

工厂方法 - 未知参数

我正在尝试第一次使用命令模式,并使用它创建一个命令工厂,我正在遵循pluralsight.com课程的指导,他在那里实现了包含MakeCommand方法的工厂接口.

现在我的问题来自于他只是传递一个字符串数组作为此方法的参数(他是一个命令行应用程序),但是我的命令将使用各种类型的各种参数,我的计划是使用这些命令用于存储模型的更新,因此如果应用程序无法连接到服务,则命令将在连接返回时排队等候.

对于使用通用接口,这对我来说一直是一个棘手的问题,我如何处理大量可能的参数?

我的第一个想法是传递模型本身,使用命令类型(删除,更新等)的简单字符串参数,但是因为我的模型没有任何公共基类或接口,所以我留下了类似的问题.

我错过了一些基本的东西吗?

编辑:请求我的问题的例子.

我有一个CommandFactory接口

 public interface ICommandFactory
{
    string CommandName { get; }
    string Description { get; }

    ICommand MakeCommand( ..arguments.. )
}
Run Code Online (Sandbox Code Playgroud)

我有简单的模型,如(纯例)

public class Model1
{
   public string Name {get;set;}
   public int Age {get;set;}
}


public class Model2
{
    public DateTime Time {get;set;}
    public double Price {get;set}
}
Run Code Online (Sandbox Code Playgroud)

如果我想创建一个命令,例如更新一个model1,我想知道Interface的MakeCommand应该如何看,我不能做MakeCommand(字符串cmdType,Model1模型),因为我有多个不同的模型,它们没有共同的基类/接口

c# wpf

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

WPF - MVVM 视图模型设置

我当前在 mvvm 应用程序中使用的设置存在一些问题。看到这里的一些帖子后,我感觉我可能做得有点错误。

我有几个模型,其中包含子模型列表,例如:

  • 项目 - 包含形式列表
  • 形式 - 包含订购物品的发货列表
  • 装运 - 包含集装箱列表
  • 容器 - 包含包列表

目前我们没有任何与这些模型直接相关的视图模型,而是只有表示模型列表的视图模型,例如,我们有一个仅包含形式列表的形式视图模型。

我的问题是,通过这种设置,我对哪个视图模型应该拥有哪些数据有点困惑,例如 ProfomalistViewModel 引用了当前选定的项目,这些模型的所有数据管理(加载和保存形式列表)是通过通过 DI 加载的管理器类完成的。

我的问题是我应该遵循我所看到的并拥有一个包含形式列表的 ProjectViewModel 和一个包含发货和订购项目列表等的 ProformaViewModel 。

原因是,最初我们没有链接任何模型,项目不拥有形式列表,而是通过管理器使用选定的项目 ID(使用关系数据库)单独加载,并且我们当前正在更改我上面描述的系统的模型。

c# wpf mvvm viewmodel

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

带参数的 WPF MVVM 数据绑定?

所以我之前的问题似乎无法回答,所以我打算用我自己的建议来试一试。

我正在寻找的功能是,当单元格中的数据已被编辑时,数据网格会更改单元格的前景(甚至背景)。

我的模型看起来像这样:

Public class Shipment : PropertyChangedBase
{
    #region Fields
    private ShippingService.Shipment.lbnshipment _localShipment;
    private ShippingService.Shipment.lbnshipment _originalShipment;
    #endregion

    #region Properties
    public int ShipmentID
    {
        get { return _localShipment.ShipmentID; }
        set
        {
            if(value != _localShipment.ShipmentID)
            {
                _localShipment.ShipmentID = value;
                NotifyOfPropertyChange(() => ShipmentID);
            }
         }
    } 

    public Shipment(ShippingServices.Shipment.lbnShipment localshipment)
    {
        _originalShipment = localshipment;
        _localShipment = localshipment;
    }

    //This Section is my best guess solution, but it just a guess
    public Color HasChanged(string Property)
    {
        switch(Property)
        {
           case "ShipmentID":
               if(_localShipment.ShipmentID != _originalShipment.ShipmentID)
               { …
Run Code Online (Sandbox Code Playgroud)

c# data-binding wpf mvvm

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

Caliburn.Micro - 将内容呈现器数据绑定到视图模型

我在 caliburn micro 中的数据绑定视图模型时遇到一些问题,我有以下代码:

<ContentControl Content="{Binding PaymentDetails}">
                <ContentControl.Template>
                    <ControlTemplate TargetType="ContentControl">
                        <Grid>
                            <Controls:RoundedBox/>
                            <ContentPresenter Content="{Binding PaymentDetails}" Margin="10,0,10,0"/>
                        </Grid>
                    </ControlTemplate>
                </ContentControl.Template>
            </ContentControl>
Run Code Online (Sandbox Code Playgroud)

问题是,PaymentDetails 是一个视图模型,虽然数据绑定到简单的 ContentControl 使用 caliburn micros 命名约定来查找视图,但在使用模板和 contentpresenter 时,视图模型绑定仅显示视图模型的字符串表示形式,而不是寻找风景。我不是这方面的专家,我也没能在谷歌上找到答案。

我想要的是在使用模板时,让视图模型绑定像往常一样自动找到视图,但我认为我在这里缺少一些理解。

c# wpf mvvm caliburn.micro

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

LINQ版本的SQL Group By

我的SQL设计师目前不在,我需要得到一些(我认为很简单)LINQ完成了,我从来没有学过这些东西,但我认为这很简单,他甚至给我留下了一些SQL代码举个例子,但我所有的努力都失败了.

我想要做的是这样的:

我有一个OrderedItem对象列表,这些对象包含一个ItemName,quantityPPU.

我想从中生成第二个列表,其中只包含所有那些orderditems的不同ItemNames,总数,以及max .quantityItemNamePPU

要清除这里是我留下的SQL.

Select ItemName
       SUM(Quantity)
       MAX(PPU)
FROM ..... (my list)
Group By ItemName
Run Code Online (Sandbox Code Playgroud)

我很感激获得LINQ版本的任何帮助.

c# linq

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

替换switch语句 - 通过字符串名称获取属性

基本上,我有一个系统,我的datagrid标记已更改为新背景颜色的单元格,为此我在对象中有一个方法,包含这些属性,接收一个字符串,这是要检查的属性的名称,然后是一个switch语句,它接受该字符串来检查正确的属性.

public Color HasChanged(string value)
{
    switch (value)
    {
        case "CILRef":
            if (_localShipment.cilRef != _originalShipment.cilRef)
            {
                return Colors.SkyBlue;
            }
            else
            {
                return Colors.White;
            }
        case "ArrivedAtPortDate":
            if (_localShipment.arrivedAtPortDate != _originalShipment.arrivedAtPortDate)
            {
                return Colors.SkyBlue;
            }
            else
            {
                return Colors.White;
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

为简洁起见,我删除了其余的属性.

现在我有一种唠叨的感觉,有一种更简洁的方法来做这个字符串>属性而不使用switch语句,但我不能在我的生活中找到谷歌的任何东西,很难搜索没有一些关键字继续下去.

我也试图只保存那些已更改的属性,我将任何已更改的属性名称放入一个数组中,然后使用另一个switch语句循环检查该数组,然后保存正确的属性.然而,这对我来说再次显得不整齐.

是否有一个更清晰的解决方案,希望可以处理添加新属性,而无需向switch语句添加新代码.

如果需要,我可以包括执行此检查的其余代码(即数据网格上的WPF绑定,以及使用属性名称作为字符串参数调用检查方法的转换器).

c# wpf switch-statement

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