我遇到了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
我试图在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中解决这个问题,而不必通过代码公开事件和启动/停止动画.
将百分比转换为从绿色(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) ) - >黄...
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表现得JsonTextWriter和JsonTextReader?不同?
据我从读讲JsonMediaTypeFormatter在的WebAPI源JsonTextWriter和JsonTextReader所使用的的WebAPI.
我编写了一个与WCF服务(BasicHttpBinding)通信的Silverlight 2应用程序.托管Silverlight内容的站点使用ASP.NET成员资格提供程序进行保护.我可以使用我的WCF服务中的HttpContext.Current.User.Identity.Name访问当前用户,并且我已打开AspNetCompatibilityRequirementsMode.
我现在想要使用完全相同的Web服务编写Windows应用程序.为了处理身份验证,我启用了身份验证服务,并且可以调用"login"来验证我的用户... Okey,一切都很好......但是我怎么能在我的其他服务客户端上设置身份验证cookie?!
两种服务都托管在同一个域中
我不想为Windows客户端创建新服务,或使用其他绑定...
客户端应用程序服务是另一种选择,但所有示例仅限于显示如何获取用户,角色和他的个人资料......但是,一旦我们使用客户端应用程序服务进行身份验证,就应该有办法获取该身份验证cookie在回调同一服务器时附加到我的服务客户端.
根据同事的意见,解决方案是添加一个wsHttpBinding终点,但我希望我可以解决这个问题......
我试图了解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) 我的SQL Reporting Services报告存在问题.我正在为报表标题使用自定义字体,当部署到服务器时,我打印或导出到PDF/TIFF时无法正确呈现.我在服务器上安装了字体.为了使用自定义字体,还有什么我需要做的吗?
在浏览器中查看字体时,它看起来是正确的 - 因为所有客户端计算机都安装了字体...
谢谢Ryan,你在FAQ上的帖子解决了这个问题.在服务器上安装字体可以解决打印问题以及图表问题(也可以在服务器上呈现).就像你指出的那样(以及FAQ中提到的)Reporting Services 2005不会在PDF文件中进行字体嵌入.我想现在还可以 - 最重要的部分是能够打印并获得正确的字体.
字体没有立即显示的原因在FAQ中回答:
问:我已经在我的客户端/服务器上安装了该字体,但我仍然看到了?或黑盒子.为什么?答:对于客户端计算机,关闭PDF查看器的所有实例然后重新打开它们应该可以解决问题.
对于服务器,重新启动服务应允许PDF呈现器获取新的字体信息.
不幸的是,我还看到过需要重启整机才能让客户端/服务器识别新安装的字体的时间.
我正在学习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)
我正在玩Sinatra,我想让我的一条路线不区分大小写.我尝试添加这样的路线:
get "(?i)/tileflood/?" do
end
Run Code Online (Sandbox Code Playgroud)
但它与预期的/ tileflood的任何排列都不匹配.我在rubular.com上测试了以下正则表达式,它匹配得很好.我错过了什么吗?
\/(?i)tileflood\/?
Run Code Online (Sandbox Code Playgroud) 我正在使用 Tailwind CSS 3.0 并根据使用预处理器对其进行配置文档对其进行配置。
\n我的main.css文件如下所示:
@import "tailwindcss/base";\n@import "./custom-base-styles.css";\n\n@import "tailwindcss/components";\n@import "./custom-components.css";\n\n@import "tailwindcss/utilities";\nRun Code Online (Sandbox Code Playgroud)\n我的postcss.config.js看起来像这样:
module.exports = {\n plugins: {\n "postcss-import": {},\n tailwindcss: {},\n autoprefixer: {}\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n目录结构如下所示:
\nStyles/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\nRun Code Online (Sandbox Code Playgroud)\n我执行以下命令来构建我的main.css文件:
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\nRun Code Online (Sandbox Code Playgroud)\n构建已执行并wwwroot/dev/v2/main.css生成了我的文件,但不包含在我的自定义样式中添加的任何其他更改。还; 该--watch参数正在侦听输入文件的更改main.css,但不是@import-ed 文件的更改。