我的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) 我一直试图让这个工作一段时间,我没有运气.我有一个数据网格(虽然这可以改为任何东西,如果它使它更容易),其中包含一长串项目.
我想要做的是打印出这个项目列表,保留分组和组头,但是我无法找到任何解决这个问题的方法,因为所有的例子和解决方案都只是将数据源转换成一个表,这个dosn保持分组.
我尝试了几种解决方案,例如:http: //www.codeproject.com/Articles/138233/Custom-Data-Grid-Document-Paginator
但是,我不确定datagrids的结构是否可以修改源以包含组.我希望,因为这似乎是一个非常普遍的想法,可以建议一些现有的解决方案.
我最近在尝试通过对话框将水晶报表形式加载到我的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) 我正在尝试第一次使用命令模式,并使用它创建一个命令工厂,我正在遵循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模型),因为我有多个不同的模型,它们没有共同的基类/接口
我当前在 mvvm 应用程序中使用的设置存在一些问题。看到这里的一些帖子后,我感觉我可能做得有点错误。
我有几个模型,其中包含子模型列表,例如:
目前我们没有任何与这些模型直接相关的视图模型,而是只有表示模型列表的视图模型,例如,我们有一个仅包含形式列表的形式视图模型。
我的问题是,通过这种设置,我对哪个视图模型应该拥有哪些数据有点困惑,例如 ProfomalistViewModel 引用了当前选定的项目,这些模型的所有数据管理(加载和保存形式列表)是通过通过 DI 加载的管理器类完成的。
我的问题是我应该遵循我所看到的并拥有一个包含形式列表的 ProjectViewModel 和一个包含发货和订购项目列表等的 ProformaViewModel 。
原因是,最初我们没有链接任何模型,项目不拥有形式列表,而是通过管理器使用选定的项目 ID(使用关系数据库)单独加载,并且我们当前正在更改我上面描述的系统的模型。
所以我之前的问题似乎无法回答,所以我打算用我自己的建议来试一试。
我正在寻找的功能是,当单元格中的数据已被编辑时,数据网格会更改单元格的前景(甚至背景)。
我的模型看起来像这样:
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) 我在 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 时,视图模型绑定仅显示视图模型的字符串表示形式,而不是寻找风景。我不是这方面的专家,我也没能在谷歌上找到答案。
我想要的是在使用模板时,让视图模型绑定像往常一样自动找到视图,但我认为我在这里缺少一些理解。
我的SQL设计师目前不在,我需要得到一些(我认为很简单)LINQ完成了,我从来没有学过这些东西,但我认为这很简单,他甚至给我留下了一些SQL代码举个例子,但我所有的努力都失败了.
我想要做的是这样的:
我有一个OrderedItem对象列表,这些对象包含一个ItemName,quantity和PPU.
我想从中生成第二个列表,其中只包含所有那些orderditems的不同ItemNames,总数,以及max .quantityItemNamePPU
要清除这里是我留下的SQL.
Select ItemName
SUM(Quantity)
MAX(PPU)
FROM ..... (my list)
Group By ItemName
Run Code Online (Sandbox Code Playgroud)
我很感激获得LINQ版本的任何帮助.
基本上,我有一个系统,我的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# ×9
wpf ×8
mvvm ×3
data-binding ×1
datagrid ×1
exception ×1
linq ×1
pagination ×1
viewmodel ×1
xaml ×1