小编Nar*_*esh的帖子

如何在WPF中将两个ObservableCollections显示为单个列表?

我有两个ObservableCollections,说ObservableCollection<Cat>ObservableCollections<Dog>.猫和狗都来自Pet类.我想显示所有宠物的清单.我该怎么做呢?我不想ObservableCollection<Pet>通过添加来自两个源列表的项来创建新的,因为随着更多的Cats和Dogs添加到源列表中,此列表将变得陈旧.我可以想到两种方法:

1)创建一个"装饰器" ObservableCollection,将两个源集合保持为成员,并每次迭代它们.

2)创建一个ObservableCollection<Pet>具有两个源集合的组合元素,但也依赖于源集合.因此,如果将Cat添加到Cat集合中,则会通知此集合,并将新Cat添加到自身.

有没有一种标准的方法可以解决这个问题?我不想重新发明轮子!

wpf merge observablecollection

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

为什么WPF DataGrid在标题中显示类名?

我通过覆盖其控件模板为我的WPF数据网格创建了一个自定义样式 - 没有什么不寻常的,只是复制了原始模板并对其进行了修改.不幸的是,当绘制网格时,我的ViewModel的完全限定类名显示在标题中(ViewModel恰好是包含DataGrid的UserControl的DataContext).使用Snoop,我缩小了模板中显示此类名的元素:

<DataGridColumnHeadersPresenter 
 Grid.Column="1" 
 Name="PART_ColumnHeadersPresenter"
 Visibility="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=HeadersVisibility, Converter={x:Static DataGrid.HeadersVisibilityConverter}, ConverterParameter={x:Static DataGridHeadersVisibility.Column}}"/>
Run Code Online (Sandbox Code Playgroud)

此部分的可视树看起来像这样:

PART_ColumnHeadersPresenter (DataGridColumnHeadersPresenter)
    (Grid)
        headerBorder (DataGridHeaderBorder)
            (Border)
                (TextBlock)
Run Code Online (Sandbox Code Playgroud)

这个文本块包含类名!所以问题是

  1. 为什么Border需要TextBlock?
  2. 为什么TextBlock使用DataContext的类名初始化?
  3. DataGrid级别是否有一个属性来控制此TextBlock的内容?

PS要回答下面的评论,我正在为ItemSource和每列指定正确的路径:

<DataGrid
    ItemsSource="{Binding Path=Orders, Mode=TwoWay}"
    AutoGenerateColumns="False"
    IsReadOnly="True">
    <DataGrid.Columns>
        <DataGridTextColumn
            Header="Creation Time"
            Binding="{Binding Path=CreationTime}"
            CellStyle="{StaticResource LeftAlignedCellStyle}"
            SortMemberPath="CreationTime">
        </DataGridTextColumn>
        ...
    </DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)

我没有看到任何必须将TextBlock绑定到列标题边框的位置.甚至不知道它是如何有意义的!

根据阿凡达的评论,我将分享我的整个模板.见下文:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Classic">

    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="Brushes.xaml"/>
    </ResourceDictionary.MergedDictionaries>

    <!-- ColumnHeader Gripper Style -->
    <Style x:Key="ColumnHeaderGripperStyle" TargetType="{x:Type Thumb}">
        <Setter Property="Width" Value="8"/>
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Cursor" Value="SizeWE"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type …
Run Code Online (Sandbox Code Playgroud)

wpf datagrid

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

基于对象类型反序列化 JSON

我正在创建一个以 JSON 消息形式接收请求的服务。我需要解析消息并根据请求类型采取适当的操作。例如(在伪代码中):

switch(request.type) {
    case "NewOrder":
        createNewOrder(order);
        break;
    case "CancelOrder"
        cancelOrder(orderId);
        break;
}
Run Code Online (Sandbox Code Playgroud)

似乎大多数 JSON API(至少那些为您做对象映射的 API)需要根对象类型来反序列化。有没有什么优雅的方法来解决这个问题?

例如,在 Jackson API(使用完整对象映射)中,我需要按如下方式调用映射器:

NewOrder newOrder = mapper.readValue(src, NewOrder.class);
CancelOrder cancelOrder = mapper.readValue(src. CancelOrder.class);
Run Code Online (Sandbox Code Playgroud)

这意味着我需要在解析对象之前就知道它的类。我真正需要的是某种方式来查看 JSON 字符串,确定请求类型,然后调用适当的 readValue() 方法 - 像这样:

String requestType = getRequestType(src);
switch(request.type) {
    case "NewOrder":
        NewOrder newOrder = mapper.readValue(src, NewOrder.class);
        createNewOrder(newOrder.order);
        break;
    case "CancelOrder"
        CancelOrder cancelOrder = mapper.readValue(src. CancelOrder.class);
        cancelOrder(cancelOrder.orderId);
        break;
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用 Jackson 或任何其他 Java JSON 解析器来做到这一点?我确信我可以进入较低级别并使用流式 API 或基于节点的 API,但如果可以,我会尽量避免这种复杂性。

java json jackson

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

无法从远程计算机访问JBoss AS 7

我在端口8080上运行JBoss AS 7.我可以从本地机器(http://localhost:8080)访问它.但是,我无法从同一网络上的其他计算机访问它,例如http://192.168.1.104:8080无法正常工作.我已在本地计算机上禁用了Windows防火墙.实际上,如果我在端口8080上在本地计算机上启动Tomacat服务器,则可以从远程计算机轻松访问它.所以这是JBoss服务器导致问题的原因.有关如何解决此问题的任何想法?

谢谢.

jboss7.x

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

基于特征检测的AngularJS服务注入

在我的Angular应用程序中,我需要创建一个持久性服务接口,该接口根据浏览器中可用的持久性机制调用具体实现.我正在考虑使用通用storageService实现此功能,该服务调用了解存储机制的特定storageService.

例如,通用storageService将提供以下接口:

angular
    .module('app.storage')
    .factory('storageService', storageService);

function storageService() {
    return {
        saveItem: saveItem,
        getItem: getItem
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

storageService将有多个实现,例如localStorageService,indexedDbStorageService,webSqlStorageService.

基于浏览器功能动态注入具体存储服务的最佳方法是什么.例如,

if (isWebSqlAvailable()) {
    // inject webSqlStorageService 
}
else if (isIndexedDbAvailable() {
    // inject indexedDbStorageService 
}
else if (isLocalStorageAvailable() {
    // inject localStorageService 
}
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-injector

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

Spring MVC - 如何根据查询参数返回不同的 JSON 响应?

我正在使用 Spring MVC 实现 REST api。要求是:

  1. /transactions返回交易数组。
  2. /transactions?groupByCategory返回按类别分组的交易。

例如请求#1 返回:

[
    { "id": 1, "category": "auto", "amount": 100 },
    { "id": 2, "category": "misc", "amount": 200 },
    { "id": 3, "category": "auto", "amount": 300 }
]
Run Code Online (Sandbox Code Playgroud)

而请求 #2 按类别对此结果进行分组并返回每个类别的总和:

[
    { "category": "auto", "amount": 400 },
    { "category": "misc", "amount": 200 }
]
Run Code Online (Sandbox Code Playgroud)

显然这些请求的返回值是不同类型的。我如何在 Spring MVC 中做到这一点?到目前为止我有:

@RequestMapping("/transactions")
public List<Transaction> getTransactions(
        @RequestParam(value="groupByCategory", required=false) String groupByCategory
        ) {

    ...
}
Run Code Online (Sandbox Code Playgroud)

但这将返回类型修复为List<Transaction>. 我如何适应第二种类型:List<TransactionSummaryByCategory>

编辑:我找到了一种解决方案,即将返回类型指定为Object …

rest spring-mvc

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

运行测试时出错 - jest.mock 不是函数

我正在尝试使用 Jest 运行测试,但是收到此错误:

jest.mock 不是一个函数

我究竟做错了什么?这是我的 CodeSandbox:https://codesandbox.io/s/polling-hook-demo-9yo8c

请注意,我在 package.json 中配置 Jest:

"setupFilesAfterEnv": [
  "./src/test/setupTestsAfterEnv.ts"
]
Run Code Online (Sandbox Code Playgroud)

setupTestsAfterEnv.ts 使用 jest-dom 扩展 Jest Expect:

import "@testing-library/jest-dom/extend-expect";
Run Code Online (Sandbox Code Playgroud)

我也在使用反应测试库。

更新

这似乎是我的 CodeSandbox 配置的问题。我在本地尝试了与 create-react-app 相同的操作,问题就消失了!

这是我的 Github 存储库,其中 Jest 运行得非常好: https: //github.com/nareshbhatia/hooked-on-polling

然后,我将此存储库导入到新的 CodeSandbox 中: https: //codesandbox.io/s/hooked-on-polling-2em7g。当我在此沙箱中运行测试时,我再次收到相同的错误:jest.mock 不是函数

reactjs jestjs codesandbox react-testing-library

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

在测试中为 BrowserRouter 设置路由

我有一个测试用例,需要从注册页面 ( /signup) 开始,成功注册后,应用程序应导航到主页 ( /)。我目前正在使用 MemoryRouter 设置初始路由/signup,一切正常。见下文:

import React from 'react';
import userEvent from '@testing-library/user-event';
import { MemoryRouter } from 'react-router';
import { Route, Routes } from 'react-router-dom';
import { render, screen } from '../../test/test-utils';
import { SignUpPage } from './SignUpPage';

const MockHomePage = () => <div>MockHomePage</div>;

describe('<SignUp />', () => {
  test('navigates to Home page on successful signup', async () => {
    render(
      <MemoryRouter initialEntries={['/signup']}>
        <Routes>
          <Route path="/" element={<MockHomePage />} />
          <Route path="/signup" element={<SignUpPage …
Run Code Online (Sandbox Code Playgroud)

reactjs react-router react-router-dom

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

AngularJS - 如何公开服务属性

我很难从Angular服务中公开属性.在下面的示例中,我将公开两个属性authService:isAuthenticateduser.但是当isAuthenticated改变时,它没有被拾取HomeController.有人能帮我理解我哪里错了吗?

(function() {
    'use strict';

    // Define the 'app' module
    angular.module('app', []);

    // Use the 'app' module
    angular
        .module('app')
        .controller('LoginController', LoginController)
        .controller('HomeController', HomeController)
        .factory('authService', authService);


    // ----- LoginController -----
    LoginController.$inject = ['authService'];
    function LoginController(authService) {

        var vm = this;
        vm.username = null;
        vm.password = null;
        vm.login = login;

        function login() {
            authService.login(vm.username, vm.password);
        }
    }


    // ----- HomeController -----
    HomeController.$inject = ['$scope', 'authService'];
    function HomeController($scope, authService) {

        var vm = …
Run Code Online (Sandbox Code Playgroud)

angularjs angularjs-service

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

如何通过简单的 http 调用使用 @ngrx/effects?

我有一个非常简单的 http 服务:

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
import { environment } from '../../environments/environment';

import { JsOrder } from '../stores/models/order';

@Injectable({
    providedIn: 'root'
})
export class OrderService {
    private ordersUrl = `${environment.httpApiUrl}/orders`;

    constructor(private http: HttpClient) {}

    fetchOrders(): Observable<JsOrder[]> {
        return this.http.get<JsOrder[]>(this.ordersUrl);
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图从@ngrx/effects 调用它(基于网络上的几个示例):

import { Injectable } from '@angular/core';
import { Actions, Effect, ofType } from '@ngrx/effects';
import { Action } from '@ngrx/store';
import …
Run Code Online (Sandbox Code Playgroud)

ngrx ngrx-effects angular6

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