小编jpi*_*son的帖子

我可以在同一个控件上为同一个命令设置多个CommandBinding吗?

我有一个UserControl,它将CommandBinding添加到它的CommandBindings集合来处理特定的Command.后来我在一个窗口中使用此控件,并希望向该控件添加另一个绑定以添加其他行为.但问题是,当我这样做时,似乎当我将另一个CommandBinding添加到控件的CommandBindings集合时,它取代了已经为同一个Command创建的任何绑定.那么看起来控件每个控件只能有一个CommandBinding,这是正确的吗?

请参阅下面的代码示例,该示例尝试为同一个Save Command设置两个CommandBindings.

<Window x:Class="MultipleCommandBindings.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Window.CommandBindings>
    <CommandBinding Command="Save"
                    Executed="CommandBinding_Executed" />
    <CommandBinding Command="Save"
                    Executed="CommandBinding_Executed" />
</Window.CommandBindings>
<Grid>
    <Button Height="23"
            HorizontalAlignment="Right"
            Margin="0,0,25,88"
            Name="button1"
            VerticalAlignment="Bottom"
            Width="75"
            Command="Save">Button</Button>
</Grid>
Run Code Online (Sandbox Code Playgroud)

最初我在编写此代码时期望编译时或运行时异常,但对它没有抱怨感到惊讶.接下来虽然我很失望,因为我的CommandBinding_Executed处理程序只被调用一次而不是我希望的两次.

更新: 经过一些测试后,看来我的第二个CommandBinding没有覆盖我的第一个,但是看起来即使我没有在我的事件处理程序中将Handled设置为true,第一个命令绑定吞下了Command.我很确定在这一点上我的问题的解决方案是理解为什么路由命令没有传播通过第一个处理程序,即使Handled未设置为true.

更新: 我发现这个很好的小信息只是证实了WPF中Command路由背后的一些奇怪行为.

更新: 考虑如何解决以下事实:每个命令似乎只有一个有效的CommandBinding,默认的CommandBinding类似乎将Executed和CanExecute暴露为事件,当然所有事件都可以有多个处理程序.然后,我们的想法是使用标准CommandBindings.Add方法之外的其他方法向命令添加其他处理程序.也许这可以通过Control类上的扩展方法完成,并与自定义CompositeCommandBinding类结合使用,该类允许我们在一个主绑定中聚合多个绑定.

wpf command commandbinding

9
推荐指数
1
解决办法
5095
查看次数

Redux形式,自我创建输入

我正在尝试创建一个redux表单(使用redux-form),可以动态创建自己的输入.我无法弄清楚如何让redux-form知道已经创建的新字段.是否有可能动态更改redux-form在表单组件本身中传递的字段?我在想这个错吗?这是我正在使用的.

class AddCustomer extends Component {

 render() {

  class Form extends Component {

    constructor(props, context) {
      super(props, context)
      this.state = {
        inputsToAdd: []
      };
    }

    handleAddInput() {
       let inputsToAdd = this.state.inputsToAdd.slice();
       inputsToAdd.push(this.state.inputsToAdd.length);
       this.setState({ inputsToAdd });
    }

    submitForm(data) {
       console.log(data)
       this.setState({inputsToAdd: []});
       this.props.dispatch(initialize('addCustomer', {}))
    }

    render() {
      const { fields, handleSubmit } = this.props;
      return (
          <div>
            <form onSubmit={handleSubmit(this.submitForm.bind(this))}>
              <Input type='text' label='Company name' {...fields['companyName']}/>
              <Input type='email' label='Admin user email' {...fields['adminEmail']}/>
            </form>
            {this.state.inputsToAdd.map((element, index) => {
              return (
                <Input key={index} type='text' /> …
Run Code Online (Sandbox Code Playgroud)

reactjs redux redux-form

9
推荐指数
1
解决办法
7775
查看次数

命名域对象,其作用类似于ddd构建块,例如存储库

当在域模型中传递概念时,存在具有名称和听起来像对象但与5个主要DDD构件块之一的责任重叠的内容,这是命名此对象和/或处理设计的最佳实践.在实际实施中可能包括也可能不包含该名称或短语?

为了给出一个更具体的例子,我们假设我们正在设计一个DDD精神的时间跟踪应用程序,并遇到域专家称之为"时间日志"的东西,它应该是保存插入和对应的日志.所有员工的打卡时间.

有了这些信息,我最初的想法是,如果有一个名为TimeLog的类,它允许查询现有的时间条目,并且还用于保存新的或修改的时间日志条目,这样的类实际上正在扮演DDD存储库的角色.为简单起见,我们假设在经过各种讨论和重构之后,我们得出结论,每次日志条目本质上都是它自己的聚合根,因此需要相应的存储库.

现在我们可以选择将我们的存储库命名为TimeLog,这似乎更符合普遍存在的语言的DDD概念,或者我们可以将其称为TimeLogEntryRepository,它似乎符合在查询聚合根之后命名存储库的更一般惯例/坚持.我更倾向于使用TimeLog的想法,因为它更能描述它在域模型中扮演的实际角色,这反过来又有助于将设计传达给领域专家.另一方面,使用TimeLogEntryRepository的选择遵循现有的DDD约定,因此可以使开发人员更容易理解设计.妥协也可以与TimeLog命名一起使用,但是让所有存储库实现IRepository接口或从公共Repository基类继承,以帮助开发人员找到并区分存储库类与构成域模型的其他类.我使用基类的主要问题是它可能鼓励使用标记接口或弱的不必要的基类只是为了组织而不是由于行为因素.

在这种情况下,最佳做法是什么?我可以看到服务可能发生同样类型的问题,因为它们是开发人员通常使用"服务"后缀命名的典型DDD构建块的另一部分,例如在SomeComplexActivityService中,但对于实体和值对象,这实际上是一个非问题.我特别感兴趣的是看看其他人可能会说具有更多DDD经验的东西.

domain-driven-design naming-conventions ddd-repositories

8
推荐指数
1
解决办法
1405
查看次数

创建和使用TypeScript库的故事是什么?

我一直在这里和那里使用TypeScript用于Web应用程序,并引用了通过Definitely Typed提供的公共类型定义但是我总是想到的一件事是如何在TypeScript中创建可重用库,目的是被一个人使用TypeScript应用程序或其他库.

关于该主题的大多数指导似乎直接指向如何为最初在JavaScript中编写的库创建或查找类型定义,但是如何使用TypeScript编写的库,似乎共享生成的js文件和相应的类型定义文件的某种机制应该是一个常见的地方,但我没有找到任何提到任何人试图为私人或公共图书馆这样做.也许我在寻找错误的地方?是否有创建和使用TypeScript库的故事.

libraries typescript

8
推荐指数
2
解决办法
1036
查看次数

在WPF中重用Bindings的任何方法?

我在WPF应用程序中已经到了这一点,我的控件上的所有绑定都变得非常重复,而且有点过于冗长.此外,如果我想更改此绑定,我将不得不在各个地方而不是一个地方更改它.

是否有任何方法可以在资源中编写绑定的源部分,然后通过使用更紧凑的语法引用它来重用它.我四处寻找这些功能,但我还没找到.

我现在在做什么

<StackPanel>
    <ToggleButton x:Name="someToggleButton" />
    <Button Visibility="{Binding ElementName=someToggleButton, Path=IsChecked, Converter={StaticResource BoolToVisibilityConverter}}" />
    <Grid Visibility="{Binding ElementName=someToggleButton, Path=IsChecked, Converter={StaticResource BoolToVisibilityConverter}}" />
    <TextBox Visibility="{Binding ElementName=someToggleButton, Path=IsChecked, Converter={StaticResource BoolToVisibilityConverter}}" />
    <CheckBox Visibility="{Binding ElementName=someToggleButton, Path=IsChecked, Converter={StaticResource BoolToVisibilityConverter}}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

我想做什么(伪代码)

<StackPanel>
    <StackPanel.Resources>
        <Variable x:Name="someToggleButtonIsChecked" 
                  Type="{x:Type Visibility}"  
                  Value="{Binding ElementName=someToggleButton, Path=IsChecked, Converter={StaticResource BoolToVisibilityConverter}}" />
    </StackPanel.Resources>

    <ToggleButton x:Name="someToggleButton" />
    <Button Visibility="{VariableBinding someToggleButtonIsChecked}" />
    <Grid Visibility="{VariableBinding someToggleButtonIsChecked}" />
    <TextBox Visibility="{VariableBinding someToggleButtonIsChecked}" />
    <CheckBox Visibility="{VariableBinding someToggleButtonIsChecked}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

是否有类似的类似功能或技术允许我声明绑定源一次然后重用它?

variables wpf resources binding reusability

7
推荐指数
1
解决办法
2254
查看次数

有什么方法可以使WPF菜单中的分隔符更窄?

我注意到,在WPF菜单中设置样式的默认分隔符的边距或高度似乎比某些其他应用程序(如Visual Studio 2010)略大.我知道这些分隔符可以通过应用使用自定义ControlTemplate的新样式,但总是我正在寻找任何可能的方法来更改它,而无需手动重新定义控件的组成.

如果我要求的是不可能的话,如果有人可以提供权威和详尽的解释,我会接受答案.另外我想强调的是,我对如何重新定义ControlTemplate的演讲不感兴趣,因为我认为这是最后的手段,我已经知道如何实现这一点.

wpf menu separator

7
推荐指数
1
解决办法
4938
查看次数

在WinForms MDI应用程序中托管WPF用户控件时如何避免可视工件?

在WinForms MDI应用程序中托管WPF用户控件时,如果您有多个彼此重叠的表单会导致非常不同的可视化工件,则会出现绘图问题.将一个子窗体拖动到另一个子窗体之后,这些工件主要是可见的,这些窗体也承载WPF内容,或者允许子窗体的边缘在拖动它时由主MDI父窗体剪切.在完成子窗体的拖放操作后,工件一般会保持不变,但我发现将焦点设置到不同的应用程序窗口,然后重新聚焦到我的应用程序窗口,它重新绘制,并且一切都很好,直到孩子表格再次移动.请参阅下面的图片来说明问题.

所描述的工件的屏幕截图

那些在微软的人坚持认为WinForms MDI已经是MDI的充分解决方案,并且不需要重新发明WPF,尽管我发现很难相信他们尝试以这种方式创建WPF应用程序,因为它有明显的缺点.

更新:我遗漏的一些额外注释是,如果我创建这些表单而不设置MdiParent,它们将被创建为常规表单,并且不会发生此问题.此问题似乎是WinForms MDI方案所特有的.此外,我目前在Windows 7企业版上运行,我知道在Windows XP上结果可能会有很大差异,但我无法对此进行测试.

更新:我在这个问题上找到了一些我认为应该分享的其他相关资源.

wpf mdi winforms-interop visual-artifacts

6
推荐指数
2
解决办法
5456
查看次数

如何使用Linq to SQL的NOEXPAND提示?

我有一个索引视图,我需要指定noexpand提示,以便它合理地执行.不幸的是,从NOLOCK提示中修改Linq to SQL生成的T-SQL查询时,似乎没有简单的方法可以直接利用这些提示或存在?

我的想法是允许通过使用属性或通过dbml声明性地定制这些东西是有意义的.此外,由于Linq to SQL似乎只针对SQL Server,因此只有我们能够利用这些高级功能(如果它们存在)才有意义.无论实施如何,虽然我对解决这个问题的任何创造性方法感兴趣.

query-hints indexed-view linq-to-sql

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

emacs fsharp-mode:缓存的类型检查结果尚不可用

我无法获得fsharp模式来显示类型签名.我打开了调试输出,并出现以下消息:'缓存的类型检查结果尚未可用'.任何想法如何让它工作?

emacs f#

6
推荐指数
0
解决办法
107
查看次数

与使用常规函数作为异步动作创建者相比,在redux中使用thunk中间件有什么好处?

我已经使用redux大约两个月了,并且刚刚开始探索处理异步行为的不同方法,例如获取数据.从文档GitHub的讨论看来,通过使用thunk中间件来实现这一点的标准方法是一个非常简单的概念但是我不确定我是否理解将执行异步状态机的责任交给redux的好处中间件,可以使用简单的独立功能.

使用thunk中间件的传统Redux方法

异步Action Creator fetchPosts

function fetchPosts(reddit) {
  return dispatch => {
    dispatch(requestPosts(reddit))
    return fetch(`http://www.reddit.com/r/${reddit}.json`)
      .then(response => response.json())
      .then(json => dispatch(receivePosts(reddit, json)))
  }
}
Run Code Online (Sandbox Code Playgroud)

然后可能在ReactJS组件中可能有一个按钮,如下面的按钮.

调度fetchPosts

<button onClick={() => this.props.dispatch(fetchPosts(this.props.reddit))} />
Run Code Online (Sandbox Code Playgroud)

单击此按钮会调用异步操作创建者requestPosts,该函数返回接受调度的函数,并负责执行任何可能具有副作用的异步代码,并调度可能导致的真实操作.

没有thunk中间件的稍微简单的例子

虽然以上内容完全可以理解,但不清楚为什么人们不愿意做一些稍微简单化的事情,如下例所示.

在没有操作创建者的情况下委派异步调度

function fetchPosts(dispatch, reddit) {
  dispatch(requestPosts(reddit))
  return fetch(`http://www.reddit.com/r/${reddit}.json`)
    .then(response => response.json())
    .then(json => dispatch(receivePosts(reddit, json)))
}
Run Code Online (Sandbox Code Playgroud)

调用fetchPosts函数并将调度作为参数传递.

<button onClick={() => fetchPosts(this.props.dispatch, this.props.reddit)} />
Run Code Online (Sandbox Code Playgroud)

结论

基于这两个示例,我并没有看到使用thunk中间件的异步动作创建者如何购买任何东西,它需要在设置middlware时增加复杂性并引入两种动作创建者(1)返回单个的纯函数要发送的动作(2)不正确的功能,将动作和其他可能的响应反馈给调度员.我觉得我在这里遗漏的东西可以解释在redux中调度除了不可变动作之外的其他东西的好处.

javascript asynchronous reactjs redux redux-thunk

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