小编NZJ*_*mes的帖子

在毕加索的动画加载图像

我有以下代码在Picasso中加载图像,使用drawable在占用图像下载时显示占位符.我想要的是一个动画旋转进度条样式微调器,在图像加载时围绕和周围动画,就像我在大多数专业应用程序中看到的那样.毕加索似乎不支持这一点,只有静态图像可绘制.有没有办法让它与毕加索合作,还是我必须做一些与众不同的事情?

Picasso.with(context).load(url)             
                    .placeholder(R.drawable.loading)
                    .error(R.drawable.image_download_error)
                    .into(view);
Run Code Online (Sandbox Code Playgroud)

android picasso

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

WPF选项卡控件和MVVM选择

我在MVVM WPF应用程序中有一个TabControl .它的定义如下.

<TabControl Style="{StaticResource PortfolioSelectionTabControl}" SelectedItem="{Binding SelectedParameterTab}" >
    <TabItem Header="Trades" Style="{StaticResource PortfolioSelectionTabItem}">
        <ContentControl Margin="0,10,0,5" Name="NSDetailTradeRegion" cal:RegionManager.RegionName="NSDetailTradeRegion" />
    </TabItem>
    <TabItem Header="Ccy Rates" Style="{StaticResource PortfolioSelectionTabItem}">
        <ContentControl Margin="0,10,0,5" Name="NSDetailCcyRegion" cal:RegionManager.RegionName="NSDetailCcyRegion" />
    </TabItem>
    <TabItem Header="Correlations / Shocks" Style="{StaticResource PortfolioSelectionTabItem}">
        <ContentControl Name="NSDetailCorrelationRegion" cal:RegionManager.RegionName="NSDetailCorrelationRegion" />
    </TabItem>
    <TabItem Header="Facility Overrides" Style="{StaticResource PortfolioSelectionTabItem}" IsEnabled="False">
        <ContentControl Name="NSDetailFacilityOverrides" cal:RegionManager.RegionName="NSDetailFacilityOverrides" />
    </TabItem>
</TabControl>
Run Code Online (Sandbox Code Playgroud)

因此,每个标签项内容都有自己的视图与之关联.这些视图中的每一个都具有MEF [Export]属性,并通过视图发现与相关区域相关联,因此上面的代码就是我需要让标签控件加载并在它们之间切换.它们都引用了它们后面的相同共享ViewModel对象,因此所有对象都无缝地交互.

我的问题是,当用户导航到父窗口时,我希望选项卡控件默认为第二个选项卡项.通过IsSelected="True"在TabItem编号2 中的XAML 中指定,在首次加载窗口时这很容易做到.当用户离开屏幕然后返回到屏幕时,这样做不太容易.

我想SelectedItem={Binding SelectedTabItem}在tab控件上有一个属性,所以我可以在ViewModel中以编程方式设置所选的选项卡,但问题是我不知道ViewModel中的TabItem对象,因为它们仅在XAML中声明,所以我没有TabItem对象传递给setter属性.

我有一个想法是让子视图(形成上面每个标签项的内容)在他们的XAML的UserControl级别上有一个样式,如下所示.

<Style TargetType={x:Type UserControl}>
    <Style.Triggers>
        <DataTrigger Property="IsSelected" Value="True">
             <Setter Property="{ElementName={FindAncestor, Parent, typeof(TabItem)}, …
Run Code Online (Sandbox Code Playgroud)

wpf tabcontrol prism mvvm

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

Clickonce部署到多个环境

我有一个WPF应用程序,我想通过ClickOnce部署给我们的用户.我们有四个环境,系统测试,用户测试,并行生产和生产.每个都需要一个不同的配置文件,其中包含服务器名称和特定于环境的其他内容,因此它们不能全部使用相同的代码库.大多数代码是相同的,但由于不同的.config文件,最终的包将略有不同.

我发现我们在用户测试中安装了一个版本,比如版本05,然后他们进行测试,然后在给他们下一个版本的时候,我们应该能够在用户测试上放一个更新的包Web服务器,然后他们可以通过单击部署URL更新其版本.但是当他们这样做时,它说"具有相同身份的应用程序已经存在",我们必须通过控制面板卸载才能安装版本06.这似乎是错误的,而不是clickonce.

您如何建议我将此应用程序构建和部署到四个不同的环境中,以便在每个环境中我们都能够在服务器上放置新版本,并且用户在该环境中测试或使用它只会降低更新和不需要卸载任何东西?

deployment clickonce

17
推荐指数
2
解决办法
5433
查看次数

使用触发器绑定WPF Datagrid单元格背景颜色

我希望WPF数据网格单元格的背景颜色在修改内容时更改颜色.每个单元格后面都有一个ViewModel对象,该对象包含以下属性 - Value,OriginalValue和Modified.当用户编辑单元格内容时,这会通过数据绑定自动触发Amount属性.然后,此属性setter将其与原始值进行检查,并将boolean Modified属性分别设置为true或false,通知绑定以更新这些属性.

到目前为止,我已经使用DataGridTextColumn的ElementStyle属性上的Style获得了部分结果,如下所示

<Style x:Key="DataGridTextStyle" TargetType="{x:Type TextBlock}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=MyViewModel.Modified}" Value="True">
            <Setter Property="Background" Value="Yellow"/>
        </DataTrigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

这会更新文本内容背景颜色,但这只是单元格中心的一个小区域.我希望整个单元格更新它的背景颜色,而不仅仅是textblock属性.

我是否可以修改上面的触发器以在可视树中向上搜索以查找父DataGridCell并在其上设置Background属性,而不是仅设置当前文本块的背景颜色?

css c# wpf datagrid

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

使用ViewModel中的多态绑定到XAML中带参数的方法

我的ResultView中有一个带有六个选项卡的TabControl.位于此View后面的ViewModel可以是ResultTypeOneViewModel或ResultTypeTwoViewModel,每个ViewModel都派生自ResultViewModel,但您可以将结果查看器与结果类型互换使用.

不同之处在于,在ResultTypeOneViewModel中,需要显示选项卡1和3,并隐藏其余选项卡.在ResultTypeTwoViewModel中,需要显示选项卡2,3,4,5,6,隐藏选项卡1.

我想通过类似的方式做到这一点

<TabItem Name="1" Visibility={Binding IsTabVisible(0)}>
<TabItem Name="2" Visibility={Binding IsTabVisible(1)}>
<TabItem Name="3" Visibility={Binding IsTabVisible(2)}>
etc...
Run Code Online (Sandbox Code Playgroud)

并在ResultsViewModel中有一个抽象方法声明,如

public abstract Visibility IsTabVisible(int index);
Run Code Online (Sandbox Code Playgroud)

并且在ResultsOneViewModel中有

public override Visibility IsTabVisible(int index)
{
    if (index == 0 || index == 2) return Visibility.Visible;
    return Visibility.Hidden;
}
Run Code Online (Sandbox Code Playgroud)

并且在ResultsTwoViewModel中有

public override Visibility IsTabVisible(int index)
{
    if (index == 0) return Visibility.Hidden;
    return Visibility.Visible;
}
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何通过绑定iN WPF XAML使用参数调用这样的方法.

任何人都可以建议我如何做到这一点,或者如果通过这种方法不可能,另一种方法我可以解决这个问题?

wpf binding mvvm

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

WPF渲染速度慢

我正在尝试提高我在WPF中的树视图的性能,当你打开一个有6000个孩子的节点时,目前显示这个大约需要13秒.我正在为子集合使用observablecollection,其中datatemplate绑定到TransactionViewModel类型,该类型有大约7列,每个列都从视图模型中提取一段数据.

创建并实例化了6000个子项的事务视图模型,但由于您还没有直观地显示它们,因此第一次展开节点时,需要13秒才能显示.如果然后收缩并展开节点,它会立即显示零时间显示/加载.我可以看到的唯一区别是,第一次TransactionviewModel的每个绑定依赖项属性都有XAML绑定调用它的getter,当你第二次重新扩展时,没有一个发生,因为没有任何改变,所以WPF没有再次调用getter并且可能只是在第二次展开时将内存中的绑定信息保存在内存中.

所以控件的可视化绘图是即时的,但是第一次打开它时(即使6000个事务视图模型对象已经完全加载到子集合中),纯粹的行渲染就是花费时间.

有趣的是,如果我将datatemplate更改为不绑定到viewmodel对象上的任何依赖项属性并且只输出空白网格,则仍需要8秒钟才能加载.因此,即使没有任何数据绑定调用,树查看器也需要8秒来渲染6000行.额外的5秒然后每行为您提供大约5个绑定数据列,因此与基本渲染相比,这是一个很小的成本.

8s渲染6000行空白对我来说似乎很高.在将XAML从数据模板渲染到树视图中时,是否有任何重大原因可能发生这种情况或需要注意的事项?香港专业教育学院曾尝试使用一个空的数据模板 - 即使它内部甚至没有空白网格,它仍然需要7秒.

鉴于它然后立即崩溃和扩展,为什么它第一次没有呈现任何XAML或调用任何数据绑定时花了这么长时间?

此外,asynch调用不是解决方案,因为我的问题不是GUI响应,而是加载数据所花费的时间.用户需要比现在更快地获得数据.

非常感谢

wpf performance

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

我可以在没有Bower或NPM的情况下安装Angular Material库吗?

我想在项目中安装Angular Material库,但我支持企业防火墙,甚至配置代理也不起作用,似乎代理阻止了某些类型的文件.有没有办法离线安装?

仅供参考,这是我的BundleConfig

 bundles.Add(new StyleBundle("~/Content/css").Include(
                      "~/Content/bootstrap.css",
                      "~/Content/font-awesome.min.css",
                      "~/Scripts/angular-loading/loading-bar.css",
                      "~/Scripts/nya-bs-select/nya-bs-select.min.css",
                      "~/Content/angular-ui-switch.css",
                      "~/Content/site.css"));

  bundles.Add(new ScriptBundle("~/bundles/angular")
                .Include("~/Scripts/angular.js",
                    "~/Scripts/angular-route.js",
                    "~/Scripts/angular-ui/ui-bootstrap-tpls.js",
                    "~/Scripts/AngularApp/app.js")
                .IncludeDirectory("~/app", "*.js", true)
                .Include("~/Scripts/smart-table/smart-table.js",
                "~/Scripts/angular-loading/loading-bar.js",
                "~/Scripts/nya-bs-select/nya-bs-select.min.js",
                "~/Scripts/moment.js"));
Run Code Online (Sandbox Code Playgroud)

javascript node.js npm angularjs bower

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

NHibernate Queryable 不允许字符串比较

我有以下代码

var results =
                repository.GetItemsAsQuery<User>().Where(
                    user => user.EmailAddress.Equals(emailAddress, StringComparison.CurrentCultureIgnoreCase));

            return results.Any();
Run Code Online (Sandbox Code Playgroud)

Repository 只是我对 NHibernate 会话的包装,该方法具有以下签名

public IQueryable<T> GetItemsAsQuery<T>()
        {
            try
            {
                CheckHasErrored();

                return _connection.Session.Query<T>();
            }
            catch (Exception ex)
            {
                HasErrored = true;
                throw new DataRepositoryException(string.Format("Error getting collection of items of type '{0}'", typeof(T).Name), "DataRepository.GetItems<>", ex);        
            }
        }
Run Code Online (Sandbox Code Playgroud)

当我运行第一个方法时,我收到错误 NotSupportException - Boolean Equals(System.String, System.StringComparison) with source NHibernate。

这似乎暗示错误来自我试图过滤 NHibernate 查询的 LINQ lambda 表达式

user.EmailAddress.Equals(emailAddress, StringComparison.CurrentCultureIgnoreCase)
Run Code Online (Sandbox Code Playgroud)

我使用 NHibernate Queryable 是否错误?我希望它生成的等效 SQL 是

select * from User where emailAddress = @emailAddress
Run Code Online (Sandbox Code Playgroud)

所以我只得到通过数据网络返回的一行。

c# nhibernate iqueryable

5
推荐指数
1
解决办法
4012
查看次数

将SignalR集线器放在React / Redux应用程序中的哪里?

我正在设计一个使用Redux作为状态存储的React网站,该网站主要是为了向用户显示项目的当前填充,并使用实时更新通过SignalR更新项目填充。

我要这样做的方法是让SignalR发送项目更新消息,以在连接到服务器集线器时初始化初始填充,并随着时间的流逝通过相同的消息类型进行更新。我将有一个函数,该函数接受SignalR消息并将其转换为Redux动作并调度到Redux商店,然后该商店将使用该动作来更新状态,然后更新UI。

所以这个想法是

1)连接到SignalR服务器中心,并为ItemUpdate消息设置客户端处理程序功能

2)当服务器从客户端收到Connect()时,它将为填充中的所有当前项目发送ItemUpdate消息

3)客户端从SignalR接收这些消息,转换为动作并调度到Redux存储

4)Redux根据新商品信息更新商店,UI会显示它

5)服务器意识到一个项目已被添加或更新,并向客户端发送新的ItemUpdate消息以进行更新

6)重复

但是我不确定应该将集线器保持在什么位置,因为这似乎与React / Redux设计背道而驰。有人可以建议最好的方法吗?

我的主要应用

import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import App from './App';
import './index.css';
import registerServiceWorker from './registerServiceWorker';
import 'rxjs';
import store from './store/index';

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root') as HTMLElement
);

registerServiceWorker();
Run Code Online (Sandbox Code Playgroud)

我的商店创建文件

import { createStore, applyMiddleware } from 'redux';
import rootReducer from '../reducers/index';
import signalRMiddleware from '../signalr/middleware';

const store = createStore(rootReducer, applyMiddleware(signalRMiddleware));
export …
Run Code Online (Sandbox Code Playgroud)

javascript signalr reactjs redux

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

LINQ group by query使用反射属性名称

我想用特定对象的公共属性填充下拉列表,我做得很好.但是现在当用户从下拉列表中选择值时,我希望它按该列对数据库表结果进行分组.我尝试过使用LINQ,但我只能弄清楚如何通过实例变量属性显式分组,而不是通过反射属性.这是我的方法 - 传入的参数是属性的字符串名称.例如,如果用户想要按Customer.Country分组,它将是"Country",如果用户想要按Customer.State分组,它将是"State".但目前我已经硬编码按"状态"分组,因为我无法弄清楚如何使用我的LINQ查询传入的字符串值

private void DisplayReportAction(string category)
{
    if (!string.IsNullOrEmpty(category))
    {
        SelectedCategory = category;
        _summaries.Clear();

        foreach (var custGroup in _customerInterface.CustomerInterface.GetAllCustomers().GroupBy(c => c.State)
            .Select(group => new
                                 {
                                     Category = group.Key,
                                     Count = group.Count()
                                 })
                                 .OrderBy(x => x.Category))
        {
            _summaries.Add(new CustomerReportSummaryViewModel(custGroup.Category, custGroup.Count));
        }

        ReportVisibility = Visibility.Visible;
    }
}
Run Code Online (Sandbox Code Playgroud)

c# linq reflection

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