IsReference
物业的目的是DataContract
什么?请求和响应如何随应用此属性而变化?
我有一个View,它显示了一个DataGrid
绑定到ObservableCollection
ViewModel中的a.为了便于讨论,我们假设我们有一个Team
包含团队的视图DataGrid
,其中每行代表一个Player
.
我的问题是我应该使用什么数据类型来代表我的Team
收藏中的玩家.集合中的项目是ViewModels本身是一个好主意吗?在这种情况下,我的Team
View将与单个Team
ViewModel以及任意数量的Player
ViewModel(在Team集合中)相关联.
将多个ViewModel与单个View相关联是否违反了MVVM的任何设计准则,是否有实现此方案的首选方法?
谢谢!
我有一个ViewModel需要ShowDialog()
在按钮点击时显示模态窗口(使用).ViewModel捕获click命令,但我不希望window.ShowDialog()
在我的ViewModel中执行.我知道DialogMessage
MVVM Light中有一个,但它用于显示消息框,而不是WPF模式窗口.
关于如何做到这一点的任何想法?
我正在调查特定操作完成所需的时间.操作如下:
Parallel.ForEach(items, item => SaveScheme(item));
Run Code Online (Sandbox Code Playgroud)
该SaveScheme
方法适用于数据库:执行一些查询并处理信息.items
收集中的元素数量可以足够大.
当我运行此操作时,大约需要20-40秒才能完成.但是当我打开一个配置文件运行它时,它只需要3秒!
我没有找到有关此问题的任何信息.我唯一的猜测是,分析Parallel.ForEach
创建的线程多于没有它的线程,但我不确定,即使它是真的,我也不知道如何处理它.
那么,为什么会发生这种情况呢?当我在没有分析的情况下运行应用程序时,我怎样才能达到这种性能?
UPD.Parallel
与此无关:我用简单测试,foreach
操作仍然在3秒内完成!
我在WPF中有一个自定义控件.在这我有一个DependencyProperty
类型int
.在自定义控件的模板中我有一个TextBlock
,我想在中显示整数的值TextBlock
.但我无法让它发挥作用.
我正在使用TemplateBinding
.如果我使用相同的代码,但是改变的类型DependencyProperty
,以string
正常工作.但我真的希望它是我的应用程序其余部分工作的整数.
我怎样才能做到这一点?
我编写了简化的代码来显示问题.首先是自定义控件:
public class MyCustomControl : Control
{
static MyCustomControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyCustomControl), new FrameworkPropertyMetadata(typeof(MyCustomControl)));
MyIntegerProperty = DependencyProperty.Register("MyInteger", typeof(int), typeof(MyCustomControl), new FrameworkPropertyMetadata(0));
}
public int MyInteger
{
get
{
return (int)GetValue(MyCustomControl.MyIntegerProperty);
}
set
{
SetValue(MyCustomControl.MyIntegerProperty, value);
}
}
public static readonly DependencyProperty MyIntegerProperty;
}
Run Code Online (Sandbox Code Playgroud)
这是我的默认模板:
<Style TargetType="{x:Type local:MyCustomControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyCustomControl}">
<Border BorderThickness="1" CornerRadius="4" BorderBrush="Black" Background="Azure">
<StackPanel Orientation="Vertical">
<TextBlock Text="{TemplateBinding MyInteger}" HorizontalAlignment="Center" …
Run Code Online (Sandbox Code Playgroud) 使用案例:我正在使用WPF在Web上下文中动态覆盖图像上的文本.
解决方案:我使用的是DrawingContext
从DrawingVisual
(包裹在一个using
声明中)来绘制原始位和覆盖文本.
问题:在几千个请求之后,该[DrawingVisual].RenderOpen()
方法开始拒绝执行并抛出以下异常:
The system cannot find the file specified System.ComponentModel.Win32Exception UInt16 RegisterClassEx(WNDCLASSEX_D) at MS.Win32.UnsafeNativeMethods.RegisterClassEx(WNDCLASSEX_D wc_d)
at MS.Win32.HwndWrapper..ctor(Int32 classStyle, Int32 style, Int32 exStyle, Int32 x, Int32 y, Int32 width, Int32 height, String name, IntPtr parent, HwndWrapperHook[] hooks)
at System.Windows.Media.MediaContextNotificationWindow..ctor(MediaContext ownerMediaContext)
at System.Windows.Media.MediaContext..ctor(Dispatcher dispatcher)
at System.Windows.Media.MediaContext.From(Dispatcher dispatcher)
at System.Windows.Media.Visual.VerifyAPIReadWrite()
at System.Windows.Media.DrawingVisual.RenderOpen()
at ...
Run Code Online (Sandbox Code Playgroud)
临时修复:唯一的解决方法是在服务器上回收IIS应用程序池,将问题解决几个小时.
问题:任何人都想过这个问题的原因(泄漏,线程,非托管代码等)?有没有其他方法可以在图像上获取文本,避免绘图视觉?也许将几何图形写入位图并直接覆盖位图?
我有两个List<FileInfo>
,我想返回FileItem
它们之间的共同点.
List<FileInfo> outputList = new List<FileInfo>();
outputList = list1.Intersect(list2).ToList();
Run Code Online (Sandbox Code Playgroud)
但是,我要回到一个空列表.
这两个列表都包含FileInfo
了
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder);
IEnumerable<System.IO.FileInfo> fileList =
dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories);
Run Code Online (Sandbox Code Playgroud)
并通过查询过滤.
我有一个非常基本的测试应用程序,只包含a Window
和a CustomControl
.该窗口包含自定义控件,并具有以下附加属性:
TextOptions.TextFormattingMode="Display"
SnapsToDevicePixels="True"
UseLayoutRounding="True"
RenderOptions.EdgeMode="Aliased"
Run Code Online (Sandbox Code Playgroud)
自定义控件将这5行添加到代码隐藏文件中:
protected override void OnRender(DrawingContext drawingContext)
{
var pen = new Pen(Brushes.Black, 1);
drawingContext.DrawLine(pen, new Point(0, 0), new Point(ActualWidth, ActualHeight));
}
Run Code Online (Sandbox Code Playgroud)
一切都很好.从左上角到右下角对角绘制黑色1px线.完善.不可否认,像素化,但正是我需要的.但是,当我最小化窗口并再次恢复它时,线条变得"模糊".没有在OnRender
窗口恢复后再次调用该方法时会发生这种情况.那么为什么在窗口最小化后绘制的图形会从根本上改变(失去焦点似乎不是问题)?为什么在窗口简单调整大小后一切都恢复正常,我该如何处理这种不需要的行为?每次WindowState
更改看起来有点过分时强制完全调整大小/无效,不是吗?
更新1:
正如@Backlash建议我将自定义控件放在画布中
<Canvas Name="CanvasControl" SizeChanged="FrameworkElement_OnSizeChanged">
<wpfTest:CustomControl x:Name="ChildControl" />
</Canvas>
Run Code Online (Sandbox Code Playgroud)
并处理这样的SizeChanged
事件
private void FrameworkElement_OnSizeChanged(object sender, SizeChangedEventArgs e)
{
ChildControl.Width = CanvasControl.ActualWidth;
ChildControl.Height = CanvasControl.ActualHeight;
}
Run Code Online (Sandbox Code Playgroud)
因为画布内的元素不会自动布局.但是,结果没有改变.
更新2:
掠过我一个想法是听更改窗口状态和强制调整大小-因此一个完整的重绘-窗口及其所有稍微控制改变Width
或Height
窗口的属性:
protected override void OnStateChanged(EventArgs e)
{
if (WindowState != WindowState.Minimized)
{
Width …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个显示多个TabItem
s 的支持工具TabControl
.每个TabItem
代表一个员工,在这些员工Tab
的每个人中都有另一个TabControl
包含额外TabItem
的员工.这些TabItem
代表该员工的Outlook文件夹(如"正在工作","已完成"等).这些文件夹中TabItem
的每一个都包含一个ListBox
绑定到与该Outlook文件夹相关ObservableCollection
的MailItem
s的文件夹.这些不是巨大的收藏 - 每个只有十几件ListBox
.虽然总的来说,所有人都TabItem
可以想到100件左右.
我目前构建应用程序的方式是应用程序启动并使用相应的员工选项卡和子选项卡填充屏幕.这个过程相当快,我很高兴.我创建了一个静态Global.System.Timer
文件,所有文件夹TabItem
的代码隐藏都与之同步.因此,应用程序每5分钟清除一次ObserverableCollection
并重新扫描Outlook文件夹.
问题是扫描过程使应用程序停止.我尝试使用a BackgroundWorker
从Outlook收集邮件作为后台进程,然后将一个List<MailItem>
对象传递给一个RunWorkerCompleted
方法,然后运行一个this.Dispatcher.BeginInvoke
清除相应的进程,ObservableCollection
然后将项目从List<MailItem>
后面添加到ObservableCollection
.我甚Dispatcher
至将此设置为较低优先级.
尽管如此,在扫描/填充ListBox
过程中应用程序非常笨重.我不清楚如何更好地设计这个,我承认我对此有些新意.我意识到清除每个ObservableCollection
s都是低效的,但Outlook文件夹更改事件并不是特别可靠,所以我需要每隔一段时间重新扫描一次以确保所有MailItem
s都被表示.
下面是我的WPF控件的代码,其中包含ListBox
.请记住,这些ListBox
控件中大约有10个同时处于活动状态.
// This entire UserControl is essentially a ListBox control
public partial class TicketListView : …
Run Code Online (Sandbox Code Playgroud) 在使用MVVM的过去,我已经创建了每个View作为DataTemplate
其对应的viewmodel来处理连接它们.我刚开始使用MVVM Light,并注意到他们有ViewModelLocator
.我看过的其他几个工具包包含了一些变化,但这会带来什么好处DataTemplate
呢?
连接Views和ViewModel的最佳做法是什么?
我有一个DataTemplate
用来显示一个类的详细信息ListBox
.在DataTemplate
具有EventTrigger
附接至该项目的Loaded
一个使用事件DoubleAnimation
的每个项目淡入视图,因为它们将被添加到ObservableCollection
绑定到ListBox
.它还有一个DataTrigger
使用a DoubleAnimation
和a ColorAnimation
(RepeatBehavior="Forever"
)在特定条件下为发光效果设置动画.到现在为止还挺好.
该应用程序要求每隔几秒更新一次项属性.ListBox
在调用时更新项目的属性后出现问题ListBox.Items.Refresh()
.这将重置动画,以便每个项目淡入视图,并且每隔几秒钟重新开始发光效果.如果我不调用,则item属性值不会更新Refresh
.我的问题是,有没有办法单独刷新每个项目或以某种方式解决这个问题?
wpf ×7
c# ×4
.net ×3
mvvm ×3
binding ×1
datacontract ×1
datatemplate ×1
dialog ×1
dispatcher ×1
fileinfo ×1
iis ×1
intersect ×1
linq ×1
list ×1
listbox ×1
listboxitem ×1
mvvm-light ×1
performance ×1
profiling ×1
refresh ×1
rendering ×1
viewmodel ×1
wcf ×1
windows-7 ×1
xaml ×1