小编STi*_*eTT的帖子

数据契约中的IsReference属性

IsReference物业的目的是DataContract什么?请求和响应如何随应用此属性而变化?

wcf datacontract

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

与单个视图关联的多个ViewModel

我有一个View,它显示了一个DataGrid绑定到ObservableCollectionViewModel中的a.为了便于讨论,我们假设我们有一个Team包含团队的视图DataGrid,其中每行代表一个Player.

我的问题是我应该使用什么数据类型来代表我的Team收藏中的玩家.集合中的项目是ViewModels本身是一个好主意吗?在这种情况下,我的TeamView将与单个TeamViewModel以及任意数量的PlayerViewModel(在Team集合中)相关联.

将多个ViewModel与单个View相关联是否违反了MVVM的任何设计准则,是否有实现此方案的首选方法?

谢谢!

wpf mvvm

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

使用MVVM Light工具包显示对话框

我有一个ViewModel需要ShowDialog()在按钮点击时显示模态窗口(使用).ViewModel捕获click命令,但我不希望window.ShowDialog()在我的ViewModel中执行.我知道DialogMessageMVVM Light中有一个,但它用于显示消息框,而不是WPF模式窗口.

关于如何做到这一点的任何想法?

dialog mvvm mvvm-light

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

通过Visual Studio性能分析,应用程序运行得更快

我正在调查特定操作完成所需的时间.操作如下:

Parallel.ForEach(items, item => SaveScheme(item));
Run Code Online (Sandbox Code Playgroud)

SaveScheme方法适用于数据库:执行一些查询并处理信息.items收集中的元素数量可以足够大.

当我运行此操作时,大约需要20-40秒才能完成.但是当我打开一个配置文件运行它时,它只需要3秒!

我没有找到有关此问题的任何信息.我唯一的猜测是,分析Parallel.ForEach创建的线程多于没有它的线程,但我不确定,即使它是真的,我也不知道如何处理它.

那么,为什么会发生这种情况呢?当我在没有分析的情况下运行应用程序时,我怎样才能达到这种性能?


UPD.Parallel与此无关:我用简单测试,foreach操作仍然在3秒内完成!

.net c# parallel-processing performance profiling

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

WPF:使用TemplateBinding将整数绑定到TextBlock

我在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 xaml binding controltemplate

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

System.Windows.Media.DrawingVisual.RenderOpen()一段时间后出错

使用案例:我正在使用WPF在Web上下文中动态覆盖图像上的文本.

解决方案:我使用的是DrawingContextDrawingVisual(包裹在一个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应用程序池,将问题解决几个小时.

问题:任何人都想过这个问题的原因(泄漏,线程,非托管代码等)?有没有其他方法可以在图像上获取文本,避免绘图视觉?也许将几何图形写入位图并直接覆盖位图?

.net iis wpf rendering system.windows.media

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

List Intersect返回null

我有两个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)

并通过查询过滤.

c# linq list fileinfo intersect

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

为什么最小化和恢复窗口会对WPF中已绘制的图形产生影响?

我有一个非常基本的测试应用程序,只包含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:

掠过我一个想法是听更改窗口状态和强制调整大小-因此一个完整的重绘-窗口及其所有稍微控制改变WidthHeight窗口的属性:

protected override void OnStateChanged(EventArgs e)
{
        if (WindowState != WindowState.Minimized)
        {               
            Width …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf windows-7

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

在填充多个ListBox时创建响应式WPF UI的技巧是什么?

我正在开发一个显示多个TabItems 的支持工具TabControl.每个TabItem代表一个员工,在这些员工Tab的每个人中都有另一个TabControl包含额外TabItem的员工.这些TabItem代表该员工的Outlook文件夹(如"正在工作","已完成"等).这些文件夹中TabItem的每一个都包含一个ListBox绑定到与该Outlook文件夹相关ObservableCollectionMailItems的文件夹.这些不是巨大的收藏 - 每个只有十几件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过程中应用程序非常笨重.我不清楚如何更好地设计这个,我承认我对此有些新意.我意识到清除每个ObservableCollections都是低效的,但Outlook文件夹更改事件并不是特别可靠,所以我需要每隔一段时间重新扫描一次以确保所有MailItems都被表示.

下面是我的WPF控件的代码,其中包含ListBox.请记住,这些ListBox控件中大约有10个同时处于活动状态.

// This entire UserControl is essentially a ListBox control
public partial class TicketListView : …
Run Code Online (Sandbox Code Playgroud)

c# wpf multithreading dispatcher backgroundworker

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

将视图模型连接到视图的首选方法是什么?

在使用MVVM的过去,我已经创建了每个View作为DataTemplate其对应的viewmodel来处理连接它们.我刚开始使用MVVM Light,并注意到他们有ViewModelLocator.我看过的其他几个工具包包含了一些变化,但这会带来什么好处DataTemplate呢?

连接Views和ViewModel的最佳做法是什么?

wpf datatemplate mvvm viewmodel viewmodellocator

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

更新没有ListBox.Items.Refresh()的WPF ListBoxItem?

我有一个DataTemplate用来显示一个类的详细信息ListBox.在DataTemplate具有EventTrigger附接至该项目的Loaded一个使用事件DoubleAnimation的每个项目淡入视图,因为它们将被添加到ObservableCollection绑定到ListBox.它还有一个DataTrigger使用a DoubleAnimation和a ColorAnimation(RepeatBehavior="Forever")在特定条件下为发光效果设置动画.到现在为止还挺好.

该应用程序要求每隔几秒更新一次项属性.ListBox在调用时更新项目的属性后出现问题ListBox.Items.Refresh().这将重置动画,以便每个项目淡入视图,并且每隔几秒钟重新开始发光效果.如果我不调用,则item属性值不会更新Refresh.我的问题是,有没有办法单独刷新每个项目或以某种方式解决这个问题?

wpf listbox refresh listboxitem

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