小编Jon*_*esø的帖子

首次调用CanExecute时,WPF CommandParameter为NULL

我遇到了WPF和命令的问题,这些问题绑定到ItemsControl的DataTemplate中的Button.这种情况很简单.ItemsControl绑定到一个对象列表,我希望能够通过单击一个Button删除列表中的每个对象.Button执行命令,Command负责删除.CommandParameter绑定到我要删除的Object.这样我知道用户点击了什么.用户应该只能删除他们的"自己的"对象 - 所以我需要在Command的"CanExecute"调用中进行一些检查,以验证用户是否具有正确的权限.

问题是传递给CanExecute的参数在第一次被调用时是NULL - 所以我无法运行逻辑来启用/禁用命令.但是,如果我启用了allways,然后单击按钮执行命令,则会正确传入CommandParameter.这意味着对CommandParameter的绑定正在起作用.

ItemsControl和DataTemplate的XAML如下所示:

<ItemsControl 
    x:Name="commentsList"
    ItemsSource="{Binding Path=SharedDataItemPM.Comments}"
    Width="Auto" Height="Auto">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Button                             
                    Content="Delete"
                    FontSize="10"
                    Command="{Binding Path=DataContext.DeleteCommentCommand, ElementName=commentsList}" 
                    CommandParameter="{Binding}" />
            </StackPanel>                       
         </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

所以你可以看到我有一个评论对象列表.我希望将DeleteCommentCommand的CommandParameter绑定到Command对象.

所以我想我的问题是:以前有没有人遇到过这个问题?我的命令会调用CanExecute,但第一次参数总是为NULL - 为什么会这样?

更新:我能够将问题缩小一点.我添加了一个空的Debug ValueConverter,以便在CommandParameter是数据绑定时输出消息.事实证明,在CommandParameter绑定到按钮之前执行CanExecute方法.我试图在Command之前设置CommandParameter(如建议的那样) - 但它仍然不起作用.有关如何控制它的任何提示.

Update2:有没有办法检测绑定何时"完成",以便我可以强制重新评估命令?另外 - 我有一个问题,我有多个按钮(ItemsControl中的每个项目一个)绑定到Command对象的同一个实例?

Update3:我已经将错误的副本上传到我的SkyDrive:http://cid-1a08c11c407c0d8e.skydrive.live.com/self.aspx/Code%20samples/CommandParameterBinding.zip

data-binding wpf xaml command .net-3.5

81
推荐指数
7
解决办法
4万
查看次数

WPF数据触发器和故事板

我试图在ViewModel/Presentation Model忙时触发进度动画.我有一个IsBusy属性,ViewModel被设置为UserControl的DataContext.当IsBusy属性为true时,触发"progressAnimation"故事板的最佳方法是什么?Blend只让med在UserControl级别添加Event-Triggers,我只能在我的数据模板中创建属性触发器.

"progressAnimation"被定义为用户控件中的资源.

我尝试在UserControl上添加DataTriggers作为样式,但是当我尝试启动StoryBoard时,我收到以下错误:

'System.Windows.Style' value cannot be assigned to property 'Style' 
of object'Colorful.Control.SearchPanel'. A Storyboard tree in a Style 
cannot specify a TargetName. Remove TargetName 'progressWheel'.
Run Code Online (Sandbox Code Playgroud)

ProgressWheel是我试图设置动画的对象的名称,因此删除目标名称显然不是我想要的.

我希望使用数据绑定技术在XAML中解决这个问题,而不必通过代码公开事件和启动/停止动画.

wpf animation expression-blend

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

条件格式 - 百分比到颜色转换

将百分比转换为从绿色(100%)到红色(0%)的颜色的最简单方法是什么,黄色为50%?

我正在使用普通的32位RGB - 因此每个组件都是0到255之间的整数.我在C#中这样做,但我想这样的问题语言并不重要.

基于Marius和Andy的答案,我使用以下解决方案:

double red = (percent < 50) ? 255 : 256 - (percent - 50) * 5.12;
double green = (percent > 50) ? 255 : percent * 5.12;
var color = Color.FromArgb(255, (byte)red, (byte)green, 0);
Run Code Online (Sandbox Code Playgroud)

完美的工作 - 只有我必须从Marius解决方案做的调整是使用256,因为(255 - (百分比 - 50)*5.12产生-1 100%时,由于某种原因在Silverlight中导致黄色(-1,255,0) ) - >黄...

c# rgb colors

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

F#,Json.NET 6.0和WebApi - 记录类型的序列化

Json.NET 6.0.1为记录和受歧视的联合添加了F#支持.当使用Json.NET序列化F#记录类型时,我现在可以获得格式良好的JSON.

序列化完成如下:

let converters = [| (new StringEnumConverter() :> JsonConverter) |]
JsonConvert.SerializeObject(questionSet, Formatting.Indented, converters)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试通过用C#编写的ASP.NET WebApi 5.0服务公开我的F#类型时,序列化的JSON包含所有属性的@ -sign infront.@ -sign来自记录类型的内部支持字段(这曾经是Json.Net和F#的已知问题).

但是 - 因为我使用的是Json.NET的更新版本,结果应该与调用JsonConvert时的结果相同吗?或者JsonConvert表现得JsonTextWriterJsonTextReader?不同?

据我从读讲JsonMediaTypeFormatter在的WebAPI源JsonTextWriterJsonTextReader所使用的的WebAPI.

serialization f# json.net asp.net-web-api

14
推荐指数
2
解决办法
1904
查看次数

WCF,ASP.NET成员资格提供程序和身份验证服务

我编写了一个与WCF服务(BasicHttpBinding)通信的Silverlight 2应用程序.托管Silverlight内容的站点使用ASP.NET成员资格提供程序进行保护.我可以使用我的WCF服务中的HttpContext.Current.User.Identity.Name访问当前用户,并且我已打开AspNetCompatibilityRequirementsMode.

我现在想要使用完全相同的Web服务编写Windows应用程序.为了处理身份验证,我启用了身份验证服务,并且可以调用"login"来验证我的用户... Okey,一切都很好......但是我怎么能在我的其他服务客户端上设置身份验证cookie?!

两种服务都托管在同一个域中

  • MyDataService.svc < - 处理我的数据的那个
  • AuthenticationService.svc < - Windows应用程序必须调用以进行身份​​验证的那个.

我不想为Windows客户端创建新服务,或使用其他绑定...

客户端应用程序服务是另一种选择,但所有示例仅限于显示如何获取用户,角色和他的个人资料......但是,一旦我们使用客户端应用程序服务进行身份验证,就应该有办法获取该身份验证cookie在回调同一服务器时附加到我的服务客户端.

根据同事的意见,解决方案是添加一个wsHttpBinding终点,但我希望我可以解决这个问题......

.net wcf web-services

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

使用Reactive Extensions(Rx)创建REST客户端API

我试图了解Reactive Extensions(Rx)的正确用例.不断出现的示例是UI事件(拖放,绘图),以及Rx适用于异步应用程序/操作(如Web服务调用)的建议.

我正在开发一个应用程序,我需要为REST服务编写一个小客户端API.我需要调用四个REST端点,三个用于获取一些参考数据(机场,航空公司和状态),第四个是主要服务,它将为您提供给定机场的飞行时间.

我创建了暴露三个参考数据服务的类,方法如下所示:

public Observable<IEnumerable<Airport>> GetAirports()
public Observable<IEnumerable<Airline>> GetAirlines()
public Observable<IEnumerable<Status>> GetStatuses()
public Observable<IEnumerable<Flights>> GetFlights(string airport)
Run Code Online (Sandbox Code Playgroud)

在我的GetFlights方法中,我希望每个航班都能在其离开的机场和航空公司的航班上保留参考.为此,我需要GetAirports和GetAirlines的数据可用.每个机场,航空公司和状态将被添加到Dictionar(ie.e Dictionary),以便我可以在解析每个航班时轻松设置参考.

flight.Airport = _airports[flightNode.Attribute("airport").Value]
flight.Airline = _airlines[flightNode.Attribute("airline").Value]
flight.Status = _statuses[flightNode.Attribute("status").Value]
Run Code Online (Sandbox Code Playgroud)

我现在的实现现在看起来像这样:

public IObservable<IEnumerable<Flight>> GetFlightsFrom(Airport fromAirport)
{
    var airports = new AirportNamesService().GetAirports();
    var airlines = new AirlineNamesService().GetAirlines();
    var statuses = new StatusService().GetStautses();


    var referenceData = airports
        .ForkJoin(airlines, (allAirports, allAirlines) =>
                            {
                                Airports.AddRange(allAirports);
                                Airlines.AddRange(allAirlines);
                                return new Unit();
                            })
        .ForkJoin(statuses, (nothing, allStatuses) =>
                            {
                                Statuses.AddRange(allStatuses);
                                return new Unit();
                            });

    string url = string.Format(_serviceUrl, 1, 7, …
Run Code Online (Sandbox Code Playgroud)

.net system.reactive

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

SQL Server 2005 Reporting Services中的自定义字体

我的SQL Reporting Services报告存在问题.我正在为报表标题使用自定义字体,当部署到服务器时,我打印或导出到PDF/TIFF时无法正确呈现.我在服务器上安装了字体.为了使用自定义字体,还有什么我需要做的吗?

在浏览器中查看字体时,它看起来是正确的 - 因为所有客户端计算机都安装了字体...


谢谢Ryan,你在FAQ上的帖子解决了这个问题.在服务器上安装字体可以解决打印问题以及图表问题(也可以在服务器上呈现).就像你指出的那样(以及FAQ中提到的)Reporting Services 2005不会在PDF文件中进行字体嵌入.我想现在还可以 - 最重要的部分是能够打印并获得正确的字体.

字体没有立即显示的原因在FAQ中回答:

问:我已经在我的客户端/服务器上安装了该字体,但我仍然看到了?或黑盒子.为什么?答:对于客户端计算机,关闭PDF查看器的所有实例然后重新打开它们应该可以解决问题.

对于服务器,重新启动服务应允许PDF呈现器获取新的字体信息.

不幸的是,我还看到过需要重启整机才能让客户端/服务器识别新安装的字体的时间.

sql reporting-services

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

使用F#测量单位从m/s转换为km/h

我正在学习F# - 目前正在研究测量单位.我有一个简单的计算返回米每秒,我想引入一个函数将其转换为每小时公里.

我的代码看起来像这样:

[<Measure>] type kg
[<Measure>] type s
[<Measure>] type m
[<Measure>] type km
[<Measure>] type h            

let msToKmph(speed : float<m/s>) =
    (float speed) * 3.6<km/h>

let gravityOnEarth = 9.81<m/s^2>
let heightOfJump = 3.5<m>

let speedOfImpact = sqrt (2.0 * gravityOnEarth * heightOfJump)
let speedOfImpactKmh = msToKmph(speedOfImpact)
Run Code Online (Sandbox Code Playgroud)

这是有效的 - 我得到8.28673639 m/s和29.832251 km/h.我不确定的是,这是表达不同单位之间关系的最佳方式.这可以更优雅地完成吗?

例如,行(浮动速度)从速度参数中移除单位信息,使msToKmph返回km/h.如果我在进行计算之前没有删除单位信息,则返回的单位为:km m /(hs)

f# units-of-measurement

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

如何在Sinatra中创建不区分大小写的路由?

我正在玩Sinatra,我想让我的一条路线不区分大小写.我尝试添加这样的路线:

get "(?i)/tileflood/?" do
end
Run Code Online (Sandbox Code Playgroud)

但它与预期的/ tileflood的任何排列都不匹配.我在rubular.com上测试了以下正则表达式,它匹配得很好.我错过了什么吗?

\/(?i)tileflood\/?
Run Code Online (Sandbox Code Playgroud)

sinatra

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

Tailwind CLI 不导入外部文件

我正在使用 Tailwind CSS 3.0 并根据使用预处理器对其进行配置文档对其进行配置。

\n

我的main.css文件如下所示:

\n
@import "tailwindcss/base";\n@import "./custom-base-styles.css";\n\n@import "tailwindcss/components";\n@import "./custom-components.css";\n\n@import "tailwindcss/utilities";\n
Run Code Online (Sandbox Code Playgroud)\n

我的postcss.config.js看起来像这样:

\n
module.exports = {\n  plugins: {\n    "postcss-import": {},\n    tailwindcss: {},\n    autoprefixer: {}\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

目录结构如下所示:

\n
Styles/v2\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 custom-base-styles.css\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 custom-components.css\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.css\nwwwroot/dev\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 v2\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.css\n
Run Code Online (Sandbox Code Playgroud)\n

我执行以下命令来构建我的main.css文件:

\n
Styles/v2\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 custom-base-styles.css\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 custom-components.css\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.css\nwwwroot/dev\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 v2\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.css\n
Run Code Online (Sandbox Code Playgroud)\n

构建已执行并wwwroot/dev/v2/main.css生成了我的文件,但不包含在我的自定义样式中添加的任何其他更改。还; 该--watch参数正在侦听输入文件的更改main.css,但不是@import-ed 文件的更改。

\n

tailwind-css

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