小编sth*_*ird的帖子

StringBuilder Append(string ...)函数的返回值有什么用?

StringBuilder的Append(字符串s)函数(和类似函数)的完整语法是

StringBuilder myStringBuilder.Append(string myString)
Run Code Online (Sandbox Code Playgroud)

既然myStringBuilder.Append(string myString)已经添加了字符串myStringBuilder,我想知道返回值是什么?我从未见过任何使用返回值的示例代码.

根据msdn,它不会返回一个新StringBuilder实例,而是返回对当前构建器本身的引用(即可能myStringBuilder).我只是想不到一个场景,当使用返回值有意义时,他们为什么不做返回类型void

c# stringbuilder

27
推荐指数
2
解决办法
1511
查看次数

用于慢速打字机的WPF ComboBox

在我的WPF应用程序中,我使用了一个组合框.当用户想要选择一个项目时,他可以输入字母,组合框跳转到以这些字母开头的下一个条目.如果用户停止输入并在一定延迟后再次启动,则组合框假定用户已经开始使用新单词.嗯,这是通常的ComboBox行为,没有什么特别的......问题是,我们的一些用户是慢速打字机.假设用户正在搜索新单词,是否有办法增加在没有组合框的情况下输入两个字母之间的时间?希望你知道我的意思......

wpf combobox

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

父视图和子视图模型之间通过notifychanged或命令属性进行通信?

在我的WPF应用程序中,我遵循MMV模式.我有一个嵌套子视图的主视图.我有一个主VM来保存子VM的实例.在某些时候,当VM VM的某些属性发生变化时,需要通知主VM.

我在网上搜索了很多.首选方法似乎是使用现有框架(MVVMlight/Prism)和/或某种信使服务.每当在任何板/常见问题上询问有关VM交互的问题时,您可以确定至少有一个答案建议使用此方法.虽然我可以很好地看到它在大型应用程序中的优势(或者如果您正在寻找"通用"解决方案),但对于小型应用程序来说,它有时似乎是一个很大的开销.

对我而言,最明显的方法,特别是在小型应用中,将是

  • 订阅子VM的NotifyPropertyChanged.

要么

  • 让主VM将(Relay)命令传递给子VM,以便子VM可以在某个属性发生变化时执行命令(甚至可以将更改后的值作为命令参数传递),这样主VM就知道了这个变化并且可以处理它.

我想知道这两种方法是否存在"错误",因为我看不到它们违反了MVVM规则?也许我错过了什么?

当您无法利用在应用程序中使用基于信使的方法的优势时,可以使用这些方法之一吗?

c# wpf mvvm

5
推荐指数
2
解决办法
2879
查看次数

XAML中的WPF合并ContextMenues

是否可以在XAML中合并两个ContextMenues?

我创建了两个ContextMenues作为资源。我在几个DataTemplates中使用它们,效果很好。但是,对于某些DataTemplates,我想将两个ContextMenus合并。不幸的是,这似乎不起作用。这是这些ContextMenu中的一个的一些代码,其他的定义相同:

<ContextMenu x:Key="CtxIEditableViewModel" DataContext="{Binding PlacementTarget,RelativeSource={RelativeSource Self}}">
    <MenuItem Header="Edit" Command="{Binding Path=DataContext.EditCommand}" CommandParameter="{Binding }">
        <MenuItem.Icon>
            <Image Source="{StaticResource IcoEdit}"  Width="16" Height="16"></Image>
        </MenuItem.Icon>
    </MenuItem>
    ...
Run Code Online (Sandbox Code Playgroud)

使用其中一个ContextMenues可以正常工作:

<StackPanel Orientation="Horizontal" ContextMenu="{StaticResource CtxIEditableViewModel}">
Run Code Online (Sandbox Code Playgroud)

但是如何合并两个呢?这行不通

<StackPanel Orientation="Horizontal">
        <ContextMenu>
            <ContextMenu.ItemsSource>
                <CompositeCollection>
                    <StaticResource ResourceKey="CtxIEditableViewModel" />
                    <StaticResource ResourceKey="CtxRootViewModel" />
                </CompositeCollection>
            </ContextMenu.ItemsSource>
Run Code Online (Sandbox Code Playgroud)

而且这也不起作用:

<StackPanel Orientation="Horizontal">
        <ContextMenu>
            <StaticResource ResourceKey="CtxIEditableViewModel" />
            <StaticResource ResourceKey="CtxRootViewModel" />
        </ContextMenu>
Run Code Online (Sandbox Code Playgroud)

当我运行程序时,抛出一个异常,说明上下文菜单可能不包含逻辑或可视父级。因为如果我仅使用一个ContextMenu,它可以正常工作,所以我不理解异常消息。

如何在XAML中合并这两个ContextMenu(或者根本不可能)?

wpf xaml contextmenu

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

标签 统计

wpf ×3

c# ×2

combobox ×1

contextmenu ×1

mvvm ×1

stringbuilder ×1

xaml ×1