我刚刚注意到,当我ViewModel
从后台工作线程更改我的(MVVM)中的绑定属性时,我没有得到任何异常,并且视图已正确更新.这是否意味着我可以安全地依赖于wpf数据绑定编组ViewModel
UI线程中的所有更改?我想我已经读过一个应该确保(在ViewModel
)INotifyPropertyChanged.PropertyChanged
线程上触发的内容.这有什么改变在3.5或什么?
我知道有几种方法可以在同一个应用程序中混合使用XNA和WPF.我发现在我的XNA游戏中将WPF用于所有GUI和HUD的东西很诱人.有没有人对这种方法在现实生活中如何使用.NET 3.5 SP1有任何实际经验?任何陷阱(例如"空域问题")?什么样的appoach最好的暗示?
我有一个viewmodel的datatemplate,其中itemscontrol绑定到CollectionViewSource(以启用xaml中的排序).
<DataTemplate x:Key="equipmentDataTemplate">
<Viewbox>
<Viewbox.Resources>
<CollectionViewSource x:Key="viewSource" Source="{Binding Modules}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="ID" Direction="Ascending"/>
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Viewbox.Resources>
<ItemsControl ItemsSource="{Binding Source={StaticResource viewSource}}"
Height="{DynamicResource equipmentHeight}"
ItemTemplate="{StaticResource moduleDataTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</Viewbox>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
我还设置了UserControl,其中所有这些都被定义为提供设计时数据
d:DataContext="{x:Static vm:DesignTimeHelper.Equipment}">
Run Code Online (Sandbox Code Playgroud)
这基本上是一个静态属性,它给我一个EquipmentViewModel,它有一个ModuleViewModel(Equipment.Modules)列表.现在,只要我绑定到CollectionViewSource,设计时数据就不会出现在混合3中.当我直接绑定到ViewModel集合时
<ItemsControl ItemsSource="{Binding Modules}"
Run Code Online (Sandbox Code Playgroud)
我可以看到设计时数据.知道我能做什么吗?
我即将主持我的第一个开源项目.我将在codeplex上托管它,我可以在以下许可证中进行选择:
Apache License 2.0,通用开发和分发许可证(CDDL),Eclipse公共许可证(EPL),GNU通用公共许可证(GPL)v2,GNU库通用公共许可证(LGPL),Microsoft公共许可证(Ms-PL),Microsoft Reciprocal License (Ms-RL),Mozilla Public License 1.1(MPL),新BSD许可证和MIT许可证
现在我对所有这些许可都是全新的.不仅我不知道我应该选择什么牌照,而且我也不知道我应该授予和否认什么样的权利.任何有关寻找许可证的过程的帮助都表示赞赏.需要考虑什么样的事情?我应该问自己什么问题?
另外:当我将代码置于任何许可证下时,我是否放弃了任何权利?我是否还需要遵守所选的许可证?
这个问题关系到这一个,但我认为应该分开询问.
我有一个复杂的对象实例图.现在,我想在内存中直接创建一个校验和,以检测自上次校验和与对象图一起保存以来是否对其进行了更改.校验和计算应该很快,不应该消耗太多内存.
据我所知,现在最好的解决方案可能是在对象图的二进制序列化形式上生成加密密钥(如果我错了,请纠正我).但这有几个问题:
更新:
您如何看待这种方法:
提到的GetHashCode算法应该快速计算一个哈希码,该哈希码对于仅考虑其原始成员的单个对象来说是非常安全的.基于此,字节数组也应该是对象图的相当碰撞安全表示以及此处的MD5/CRC散列.
当我满足以下要求时,什么是最适合NLog的查看器:
作为最后的手段,如果没有一个可以同时进行离线和在线观看,也可以使用单独的配置使用单独的查看器.
如果我错了,请纠正我,但由于NLog似乎有很多方法可以吐出log4j/log4net可编辑日志,我想log4j/log4net查看器也可以做到这一点.
有没有办法在xaml中某处定义动画(例如作为资源),然后多次重复使用?我在不同的数据模板上有很多独立的画笔,它们独立地需要基于数据触发器来启动相同类型的动画.现在,因为动画似乎必须定义Storyboard.TargetName和Storyboard.TargetProperty.这几乎违背了可重用性的目的.我想以某种方式宣称"使用此动画形成资源,但这次将其应用于另一个元素".
对我来说,这似乎是一个相当基本,重要和必要的要求,我很惊讶它不是那么直截了当地表达的.我在这里错过了什么吗?
同样的事情适用于触发器.假设我有许多不同的视觉元素,它们都使用颜色动画表示相同类型的状态.例如,当"活动"在"错误"等时淡入"红色"时淡入绿色.视觉效果之间的唯一区别是它们的形状/视觉树所需的动画行为是相同的,它们在视觉树中的某处都有一个元素具有颜色类型的属性.我认为不难想象一遍又一遍地重新定义相同的动画和数据触发器是多么乏味.每个开发人员都讨厌这个.我拼命寻求一种更简单的解决方案,不需要(或至少很少)c#代码.
到目前为止我得出的是:
在资源中定义动画像这样(对于所有基本状态重复此操作,如激活,激活,非活动,错误):
<ColorAnimationUsingKeyFrames x:Key="deactivatingColorAnimation"
Storyboard.TargetProperty="Material.(MaterialGroup.Children)[0].Brush.(SolidColorBrush.Color)"
FillBehavior="HoldEnd" RepeatBehavior="Forever" AutoReverse="True">
<ColorAnimationUsingKeyFrames.KeyFrames>
<LinearColorKeyFrame KeyTime="00:00:00" Value="Gray"/>
<LinearColorKeyFrame KeyTime="00:00:0.25" Value="Gray"/>
<LinearColorKeyFrame KeyTime="00:00:0.5" Value="Gray" />
<LinearColorKeyFrame KeyTime="00:00:0.75" Value="Gray" />
</ColorAnimationUsingKeyFrames.KeyFrames>
</ColorAnimationUsingKeyFrames>
Run Code Online (Sandbox Code Playgroud)
在触发器的故事板中使用它(对于每个状态X重复这个数十亿次的每个不同的状态,总是为故事板创建一个新名称):
<DataTrigger Binding="{Binding SubstrateHolder.State}" Value="Deactivating">
<DataTrigger.EnterActions>
<BeginStoryboard x:Name="someStateVisualDeactivatingStoryboard">
<Storyboard Storyboard.TargetName="someStateVisual">
<StaticResource ResourceKey="deactivatingColorAnimation" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<RemoveStoryboard BeginStoryboardName="someStateVisualDeactivatingStoryboard" />
</DataTrigger.ExitActions>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)
您可以很容易地想象我必须为所有那些数以万计的DataTriggers重复复制和粘贴多少臃肿的XAML.
定义所有这些触发器并将其应用于不同的状态视觉效果会很酷.在WPF中如何解决这样的问题?有提示吗?
我的应用程序(基本应用程序是MFC与C++/CLI互操作,但它也包含很多C#,Windows窗体,WPF)有一个句柄泄漏.在应用程序启动后不久,我可以看到任务管理器中的句柄计数不断增长(以每秒10个新句柄的速率).所以我使用handles.exe来查看它们是什么类型的句柄.我发现泄漏的手柄是工艺手柄.它们是我的应用程序流程的流程句柄.
所以我想知道什么操作通常会创建它运行的进程的句柄.任何想法?你见过这样的东西吗?考虑到我不能使用调试DLL并且我只能使用可以部署xcopy的工具,我还能做些什么来追踪泄漏.
更新:
我能够向它发出windbg和!handle,!htrace,并发现进程句柄都是使用以下堆栈跟踪创建的(按频率排序):
0x79f7570b: mscorwks!CorExitProcess+0x00022055
0x79f03edd: mscorwks!GetPrivateContextsPerfCounters+0x0000b6fe
0x79f04b87: mscorwks!GetPrivateContextsPerfCounters+0x0000c3a8
0x79f04b03: mscorwks!GetPrivateContextsPerfCounters+0x0000c324
0x79f919bf: mscorwks!CorExitProcess+0x0003e309
0x79f91b28: mscorwks!CorExitProcess+0x0003e472
0x792d6b4c: mscorlib_ni+0x00216b4c
0x1391a663: +0x1391a663
0x1391a0b1: +0x1391a0b1
0x7a9ea544: System_ni+0x005aa544
0x792a842f: mscorlib_ni+0x001e842f
Run Code Online (Sandbox Code Playgroud)
要么
0x7c8106f5: kernel32!CreateThread+0x0000001e
0x79f04bb2: mscorwks!GetPrivateContextsPerfCounters+0x0000c3d3
0x79f04b03: mscorwks!GetPrivateContextsPerfCounters+0x0000c324
0x79f919bf: mscorwks!CorExitProcess+0x0003e309
0x79f91b28: mscorwks!CorExitProcess+0x0003e472
0x792d6b4c: mscorlib_ni+0x00216b4c
0x1391a663: +0x1391a663
0x1391a0b1: +0x1391a0b1
0x7a9ea544: System_ni+0x005aa544
0x792a842f: mscorlib_ni+0x001e842f
Run Code Online (Sandbox Code Playgroud)
要么
0x08ec2eba: +0x08ec2eba
0x792b8277: mscorlib_ni+0x001f8277
0x792b8190: mscorlib_ni+0x001f8190
0x792b8040: mscorlib_ni+0x001f8040
0x792b7ff2: mscorlib_ni+0x001f7ff2
0x677e48f3: System_Runtime_Remoting_ni+0x000748f3
0x677e44be: System_Runtime_Remoting_ni+0x000744be
0x677e46ec: System_Runtime_Remoting_ni+0x000746ec
0x677e8408: System_Runtime_Remoting_ni+0x00078408
0x7926eb8d: mscorlib_ni+0x001aeb8d
Run Code Online (Sandbox Code Playgroud)
那告诉我什么?
我们有很多项目的解决方案,以及这些项目之间或多或少复杂的依赖图.现在每个项目都应该成为自己的nuget包,nuget包的依赖图应该反映项目的内容.
我有两个问题:
wpf ×4
.net ×3
interop ×2
animation ×1
backup ×1
blend ×1
c# ×1
checksum ×1
data-binding ×1
datatrigger ×1
direct3d ×1
handle-leak ×1
licensing ×1
log4j ×1
log4net ×1
mfc ×1
mvvm ×1
nlog ×1
nuget ×1
nuget-spec ×1
open-source ×1
resharper ×1
resources ×1
reusability ×1
settings ×1
viewer ×1
xna ×1