小编akj*_*shi的帖子

在代码中设置DataContext而不是XAML有什么好处?

在WPF中定义DataContext似乎有两种主要方式:

  • 无论是在代码是这样的:

App.xaml.cs(取自WPF MVVM Toolkit模板):

public partial class App : Application
{
    private void OnStartup(object sender, StartupEventArgs e)
    {
        // Create the ViewModel and expose it using the View's DataContext
        MainView mainView = new MainView();
        MainViewModel mainViewModel = new MainViewModel();
        mainViewModel.LoadCustomers("c:\\testdata2\\Customers.xml");
        mainView.DataContext = mainViewModel;
        mainView.Show();
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 或者像这样的XAML:

Window1.xaml:

<DockPanel>
    <StackPanel
        HorizontalAlignment="Left"
        DockPanel.Dock="Top"
        Orientation="Horizontal">
        <StackPanel.DataContext>
            <local:CustomerViewModel />
        </StackPanel.DataContext>
        <TextBlock Text="{Binding Path=FirstName}" />
        <TextBlock Text=" " />
        <TextBlock Text="{Binding Path=LastName}" />
    </StackPanel>

    <StackPanel
        HorizontalAlignment="Left"
        VerticalAlignment="top" …
Run Code Online (Sandbox Code Playgroud)

data-binding wpf datacontext xaml expression-blend

13
推荐指数
3
解决办法
3万
查看次数

C#,Flags Enum,寻找标志的通用函数

我想要一个可以与任何Flags样式枚举一起使用的通用函数来查看是否存在标志.

这不会编译,但如果有人有建议,我会很感激.

public static Boolean IsEnumFlagPresent<T>(T value,T lookingForFlag) 
       where T:enum
{
    Boolean result = ((value & lookingForFlag) == lookingForFlag);
    return result ;            
}
Run Code Online (Sandbox Code Playgroud)

c# enums enum-flags

13
推荐指数
4
解决办法
1万
查看次数

WPF - 在App.g.cs中关闭Main的autogen

我正在学习WPF.

我想在我的App.xaml.cs中提供我自己的Main方法,而不是在App.g.cs中为我生成一个.但是我不断遇到冲突因为我还没有找到如何阻止生成额外的Main.

我的项目文件或其他地方是否有设置控制此设置?

wpf app.xaml

13
推荐指数
2
解决办法
7852
查看次数

推荐的WPF项目结构?

我是一个很好的Visual Studio解决方案和项目结构的坚持者.

我即将开始WPF概念证明工作.

任何人都可以推荐一些他们使用过的WPF项目结构并且发现效果很好吗?

这里http://drwpf.com/blog/2007/10/01/58/

他们有一个我喜欢的建议:

    Root
    - Pages
    - Controls
    - Resources
    App.xaml
Run Code Online (Sandbox Code Playgroud)

页面,控件和资源是文件夹.

有没有人发现某些结构运作良好/不能正常工作?

此外,如果你们这样做,我宁愿不进入"模型视图演示者"讨论.

.net wpf project-planning project-structure mvvm

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

WinForms到WPF - 我们如何从这里到达那里?

有没有一种实用的方法让我们慢慢将WinForms应用程序演变为WPF,而不会为奇怪的互操作场景创建支持梦魇?

背景资料:

我们有一个庞大的战舰灰色WinForms应用程序,大约60-75个用户的内部组使用.我们开始遇到可以看到在WPF中使用应用程序带来好处的地方,但这还不足以证明大型项目完全重写它的合理性.应用程序中的所有屏幕都是自包含的WinForms用户控件,而WinForms应用程序只是一个处理菜单,打开/关闭表单,提供一些共享帮助方法等的shell ...

到目前为止,我们最好的想法是将shell应用程序转换为WPF,然后在其中托管WinForms用户控件.我们认为我们可以随着时间的推移转换用户控件,将这些更改与具有足够业务价值的计划相结合,以支持额外的工作.我担心互操作性能如何以及它将如何影响性能.我也关注我们如何过渡到应用程序的新外观.让shell应用程序看起来很时髦,然后在其中托管旧的战舰灰色用户控件似乎很奇怪,在WPF中创建shell应用程序并使其看起来就像在WinForms中一样.

如果其中一个Caliburn,Prism或其他类似的框架可以缓解过渡,我们也愿意探索这些选择.

.net wpf client-server winforms-interop winforms

13
推荐指数
1
解决办法
2207
查看次数

TreeView虚拟化

我们试图提出一种虚拟化的好方法TreeView,数据并不是真正的问题,因为它非常轻(每个项目大约16个字节),问题是我们可能有数万个,尽管实际上数据只需要160 kb的内存,treeview项目确实使用了更多的内存.我们现在尝试使用3种不同的树进行虚拟化,WPF,Infragistics和Telerik.所有这些都有很大的问题,使它们无法用于我们的应用程序:

WPFTreeView:滚动条显示了一些怪异的行为,周围很多跳跃,变化大小不一致,用鼠标拖动它不能正常工作,滚动(跳来回)

Telerik:项目消失,滚动条也不稳定,项目随机展开崩溃,样式不起作用

Infragistics:项目根本没有虚拟化,每个项目都留在内存中,使虚拟化无用.

我们几个月来一直在努力解决这个问题,但我们还没有找到一个好的解决方案.有没有人成功实现TreeView了超过9000项的虚拟化?如果是这样,你的策略是什么?你使用了第三方控件吗?它100%有效吗?

任何建议都非常感谢.

谢谢.

.net wpf treeview virtualization

13
推荐指数
1
解决办法
3298
查看次数

在ViewModel中获取WPF ListView.SelectedItems

有一些帖子讨论ListView.SelectedItems了为非平凡数量的代码添加数据绑定能力.在我的场景中,我不需要设置它ViewModel,只需获取选定的项目以便对它们执行操作并且它由命令触发,因此也不需要推送更新.

是否有一个简单的解决方案(在代码行方面),可能在代码隐藏?只要View并且ViewModel不需要互相引用,我就可以使用代码隐藏.我认为这是一个更通用的问题:" VM从按需查看数据的最佳实践 ",但我似乎找不到任何东西......

.net data-binding wpf listview mvvm

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

使用ElementHost中的WPF控件呈现问题

我有一个WinForms控件,里面我有一个TableLayoutPanel包含多个ElementHosts,每个ElementHost包含一个WPF控件.

一切都很好,除非控件的大小比窗口大,并且ScrollBar在那里; 当我向下滚动时,控件变得扭曲,就像这样 -

在此输入图像描述

在最大化窗口或重新调整窗口大小时,控件可以正确渲染(减小控件的大小,使控件离开可见区域,然后再次增大大小以使其返回可见区域)

在WPF窗口的同一窗口中,WinForms控件不会发生这种情况; 知道为什么会这样,有什么解决方案吗?

.net c# wpf elementhost winforms

13
推荐指数
1
解决办法
4656
查看次数

WPF验证(IDataErrorInfo)和选项卡聚焦问题

我有一个TextBox实现的对象的属性绑定IDataErrorInfo.我成立Validation.ErrorTemplateTextBox,并能正常工作.问题是我在a上有这些TabControl,如果我将标签更改为另一个标签然后返回到初始标签(其中TextBox),则验证模板不再显示.它看起来像是经过验证的(就像值是正确的),但实际上并非如此.

这是IDataErrorInfo对象 - 请注意,"正确"值是一个长度为2的字符串:

public class Presenter : IDataErrorInfo
{
    public Presenter()
    {
        this.Property = String.Empty;
    }

    public string Property { get; set; }

    public string Error { get { return null; } }

    public string this[string columnName]
    {
        get
        {
             if (columnName == "Property")
             {
                if (this.Property.Length == 2)
                   return null;
                else
                   return "Invalid property length!";
             }
             else return null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是XAML:

<TabControl …
Run Code Online (Sandbox Code Playgroud)

c# validation wpf tabcontrol idataerrorinfo

12
推荐指数
1
解决办法
5184
查看次数

我应该使用WPF转换器还是触发器?

我想知道你如何决定何时使用converters以及何时使用triggers.我更喜欢在GUI上使用触发器来操作(比如显示/隐藏控件,改变它们的外观等).

前段时间我使用了一个BooleanToVisibilityConverter用于此目的,但现在,我只是不需要它,我做所有与visibility使用触发器相关的事情,我甚至开始思考" 由MS团队创建一个目的是什么BooleanToVisibilityConverter?" .通常,当我有可能尝试使用声明方式编写代码时 - 在本例中 - XAML.

你对此有何看法?

.net wpf xaml triggers converter

12
推荐指数
1
解决办法
3342
查看次数