我在Entity Framework模型中看到了一种奇怪的行为.我有一个看起来像这样的查询:
var rows = ( from alarm in context.Alarms
join temp in context.ListDetails on alarm.ListDetailId equals temp.ListDetailId into entries from entry in entries.DefaultIfEmpty()
join read in context.Reads on alarm.ReadId equals read.ReadId
join plate in context.Images on alarm.ReadId equals plate.ReadId
where alarm.IActive == 1 && ! alarm.TransmittedAlarm
where read.IActive == 1
where plate.IActive == 1 && plate.ImageTypeId == 2
select new { alarm, entry, read, plate } ).ToArray();
Run Code Online (Sandbox Code Playgroud)
该查询按列名称按字母顺序返回所有列.事实证明,对于结果集中的几行,此列为NULL.当我在调试器中展开rows变量时,我看到整行是空的!
编辑:一些澄清.
通过"第一列",我的意思是第一行的第一列,即"SELECT A,B,C FROM ...",我的意思是A.实际上,实体框架构建的查询返回所有的连接结果集中的列按字母顺序排列,第一个按字母顺序排列可为空,对于某些行为空.
有问题的列不是主键; 如果它是主键,则不能为空.
当Entity Framework将返回数据的行处理为对象时,它会查看每行中第一列的值.如果该列为null,则为该行返回null,而不是具有与该列对应的属性设置为null的对象.
我不相信这与左外连接有任何关系; 只是我的查询使用了一个.但是,我没有做任何测试来验证这一点,所以这只是一个假设. …
我的 WPF 程序使用SingleInstance.cs来确保只有一个实例正在运行,如果用户尝试通过双击它的快捷方式或其他机制来重新启动它。但是,在我的程序中存在需要重新启动的情况。这是我用来执行重启的代码:
App.Current.Exit += delegate( object s, ExitEventArgs args ) {
if ( !string.IsNullOrEmpty( App.ResourceAssembly.Location ) ) {
Process.Start( App.ResourceAssembly.Location );
}
};
// Shut down this application.
App.Current.Shutdown();
Run Code Online (Sandbox Code Playgroud)
这在大多数情况下都有效,但问题是它并不总是有效。我的猜测是,在某些系统上,第一个实例及其RemoteService
创建的实例尚未终止,这会导致调用 to 启动的进程Process.Start( App.ResourceAssembly.Location );
终止。
这是我的 app.xaml.cs 中的 Main 方法:
[STAThread]
public static void Main() {
bool isFirstInstance = false;
for ( int i = 1; i <= MAXTRIES; i++ ) {
try {
isFirstInstance = SingleInstance<App>.InitializeAsFirstInstance( Unique );
break;
} catch ( RemotingException …
Run Code Online (Sandbox Code Playgroud) 我最近在我的WPF应用程序中添加了一个窗口,它可以作为"应用栏"停靠在桌面的边缘.我用来进行对接的代码来自这个 stackoverflow帖子.
该程序有三个与此窗口相关的用户设置.一个是窗口停靠的边缘,另外两个是Left
&Top
属性的值.我们的想法是,当窗口关闭或程序关闭时,窗口将在程序重新启动时以相同的状态和位置打开.
我遇到的问题是,当程序打开时,窗口首先显示在屏幕上的随机位置(可能是创建窗口时由Windows分配给它的坐标),然后它移动到停靠位置.我见过的其他具有应用程序栏功能的程序,如Trillian,从头开始绘制在停靠位置.看到窗户像这样移动有点令人不安.
这是窗口中的一些代码:
private void AppBarWindow_Activated( object sender, EventArgs e ) {
if ( Settings.Default.AppBarWindowEdge != ABEdge.None ) {
AppBarFunctions.SendShellActivated( this );
}
}
private void AppBarWindow_Closing( object sender, CancelEventArgs e ) {
Settings.Default.AppBarWindowLeft = Left;
Settings.Default.AppBarWindowTop = Top;
Settings.Default.Save();
AppBarFunctions.SetAppBar( this, ABEdge.None );
// Other, app specific code . . .
}
private void AppBarWindow_LocationChanged( object sender, EventArgs e ) {
if ( Settings.Default.AppBarWindowEdge != ABEdge.None ) {
AppBarFunctions.SendShellWindowPosChanged( this );
} …
Run Code Online (Sandbox Code Playgroud) 我正在研究一个派生自WPF Window
类的类,它作为一个名为的应用程序工具栏窗口AppBarWindow
.我已经能够找到各种WinForms实现,但没有WPF实现.
我有很多代码可以工作,但我需要知道用户何时开始在屏幕上拖动窗口以及何时停止,因为窗口的行为会有所不同.默认的WPF处理不太正确,所以我实现了自己的Window Procedure并使用HwndSource
对象安装它.
我在工作中没有非客户区的应用程序中工作.在这种情况下,有一个LeftMouseButtonDown
事件处理程序将标志设置为true,然后调用DragMove
拖动窗口的方法.当该方法返回时,我将标志设置为false.一切正常.
但是我现在正在使用一个不使用该DragMove
方法的通用类.我可以LeftMouseButtonDown
为窗口添加另一个处理程序,但如果鼠标位于非客户区域,我不相信会被调用.
如何检测用户是否正在拖动窗口以及它们在这种情况下何时停止?
我们有两个共享资源DLL项目的产品.DLL中有三种不同的资源类.一个用于共享后端,第二个用于一个产品,另一个用于另一个产品.
其中一个产品是WPF Windows应用程序.该应用程序有一个名为的静态类MyCommands
:
public static class CarSystemCommands {
public static RoutedUICommand CameraStatus { get; set; }
public static RoutedUICommand CancelChanges { get; set; }
. . .
static CarSystemCommands() {
CameraStatus = new RoutedUICommand( Car.Dashboard_CameraStatus, "CameraStatus", typeof( CarSystemCommands ) );
CancelChanges = new RoutedUICommand( Car.Common_CancelChanges, "CancelChanges", typeof( CarSystemCommands ) );
. . .
}
}
Run Code Online (Sandbox Code Playgroud)
一切都编译好了.
现在,我在一个CameraConfiguration
使用相同资源文件的项目中有一个用户控件,称之为.当我在XAML设计器中查看用户控件时,它显示正常.
该CameraConfigurtaion
控件包含在另一个用户控制用户,调用它SettingsEditor
.当我SettingsEditor
在XAML设计器中查看时,出现错误:
例外:无法创建"CameraConfiguration"的实例.
查看各种堆栈跟踪,我得到一个读取:
FileNotFoundException:无法加载文件或程序集"Resources,Version = 5.1.15588.0,Culture = neutral,PublicKeyToken = null"或其依赖项之一.该系统找不到指定的文件.
资源项目只有默认引用.它没有引用任何其他DLL或项目.
正如我所说,一切都正确编译和运行.当我在设计器中编辑它时,报告问题的控件显示得非常好.
有没有人对导致这个问题的原因有任何想法?或者我如何解决它?当你对它进行更改时,不能查看控件很烦人. …
我有一个UserControl,上面有一个按钮.UserControl有一个名为IsNew的DependencyProperty.这是一个bool值,如果在控件中编辑的对象是新创建的并且尚未写入数据库,则该值设置为true.否则就是假的.
我有一个按钮,当前显示"保存".我被要求更改按钮,如果行是新的,则显示"插入".我现在有按钮下面的XAML:
<Button Background="{DynamicResource ButtonBackground}"
Click="SaveButton_Click"
Content="Save"
FontSize="20"
FontWeight="Bold"
Foreground="{DynamicResource ButtonForeground}"
Height="60"
IsEnabled="{Binding Path=IsDirty, RelativeSource={RelativeSource AncestorType={x:Type cs:Editor}}}"
Margin="5"
Name="SaveButton"
TabIndex="7"
Visibility="{Binding Path=CanModify, Converter={StaticResource BoolToVisibility}}">
<Button.Triggers>
<Trigger Property="Editor.IsNew" Value="True">
<Setter Property="Button.Content" Value="Insert" />
</Trigger>
<Trigger Property="Editor.IsNew>
<Setter Property="Button.Content" Value="Save" />
</Trigger>
</Button.Triggers>
</Button>
Run Code Online (Sandbox Code Playgroud)
我在运行时遇到异常,其内部异常如下:
Triggers collection members must be of type EventTrigger.
Run Code Online (Sandbox Code Playgroud)
我如何让它工作?我可以在代码隐藏中轻松地做到这一点,但我想在XAML中做到这一点.
谢谢
托尼
我的 WPF 应用程序中有DataGrid
一个包含对象的控件。该对象有一个布尔属性,可以通过用户操作进行更改。当该属性的值更改时,我需要更改行的样式。
我写了一个继承自以下的类StyleSelector
:
public class LiveModeSelector : StyleSelector {
public Style LiveModeStyle { get; set; }
public Style NormalStyle { get; set; }
public override Style SelectStyle( object item, DependencyObject container ) {
DataGridRow gridRow = container as DataGridRow;
LPRCamera camera = item as LPRCamera;
if ( camera != null && camera.IsInLiveMode ) {
return LiveModeStyle;
}
return NormalStyle;
}
}
Run Code Online (Sandbox Code Playgroud)
所讨论的视图模型类实现了INotifyPropertyChanged
,并且PropertyChanged
当所讨论的属性发生更改时它会引发该事件。
// Note: The ModuleMonitor class implements INotifyPropertyChanged and raises …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个需要使用FileSystemWatcher
该类的C#程序,以便在创建新文件时通知它.作为初始化的一部分,程序扫描目录,以便它可以处理其中已存在的任何文件.这一切都很好.
但是,在与另一位开发人员的讨论中,我们开始质疑这是否始终有效.是否存在FileSystemWatcher
错过创建文件的条件?如果是这样,这些条件是什么?
为了处理这种情况,我们只是在初始化过程中运行代码,定期扫描目录,但是FileSystemWatcher
错过文件的可能性有多大?
我们的软件存在问题,为了解决问题,我必须编写一个存储过程,该过程将作为升级安装升级过程的一部分运行.此存储过程需要查找特定表中符合特定条件的每一行并更新该行.出于内部原因,更新必须通过我们专门为插入和更新数据而编写的存储过程来完成.
这是我为解决此问题而编写的存储过程:
CREATE OR REPLACE FUNCTION FixDataProblem() RETURNS VOID AS $$
DECLARE
FixCursor NO SCROLL CURSOR FOR
SELECT * FROM MyTable WHERE ProblemColumn IN ( '?', 'PR' );
RowToUpdate MyTable%ROWTYPE;
BEGIN
-- Open the cursor
OPEN FixCursor;
-- Start a loop
LOOP
-- Fetch the next row from thr cursor
FETCH FixCursor INTO RowToUpdate;
-- Did we get anything back?
IF RowToUpdate IS NULL THEN
-- We didn't. Exit the loop
EXIT;
END IF;
-- Call the UpsertMyTable stored procedure …
Run Code Online (Sandbox Code Playgroud) 我正在为我的WPF应用程序创建一个对话框窗口.我知道WPF要求所有控件都有一个默认构造函数,我可以创建所有带有我想要的参数的构造函数.但默认构造函数是否必须公开?我可以将其设为内部,私人,甚至保护?