我们现在已经使用WiX一段时间了,尽管人们普遍抱怨易用性,但它还是相当不错.我正在寻找的是有用的建议:
我们有一个字符串字段,可以包含XML或纯文本.XML不包含<?xml头,也没有根元素,即格式不正确.
我们需要能够编辑XML数据,清空元素和属性值,只留下它们的名称,所以我需要在编辑之前测试该字符串是否为XML.
目前我正在使用这种方法:
string redact(string eventDetail)
{
string detail = eventDetail.Trim();
if (!detail.StartsWith("<") && !detail.EndsWith(">")) return eventDetail;
...
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
这种方法可能会遗漏任何边缘情况吗?
我很欣赏我可以使用XmlDocument.LoadXml和捕获XmlException,但这感觉像一个昂贵的选项,因为我已经知道很多数据将不是XML.
这是一个XML数据的例子,除了缺少一个根元素(为了节省空间而省略,因为会有很多数据),我们可以假设它是格式良好的:
<TableName FirstField="Foo" SecondField="Bar" />
<TableName FirstField="Foo" SecondField="Bar" />
...
Run Code Online (Sandbox Code Playgroud)
目前我们只使用基于属性的值,但如果数据变得更复杂,我们将来可能会使用元素.
解
基于多个评论(谢谢你!)
string redact(string eventDetail)
{
if (string.IsNullOrEmpty(eventDetail)) return eventDetail; //+1 for unit tests :)
string detail = eventDetail.Trim();
if (!detail.StartsWith("<") && !detail.EndsWith(">")) return eventDetail;
XmlDocument xml = new XmlDocument();
try
{
xml.LoadXml(string.Format("<Root>{0}</Root>", detail));
}
catch (XmlException e)
{
log.WarnFormat("Data NOT redacted. …Run Code Online (Sandbox Code Playgroud) 在我们的构建过程中,目前有可能将非基于代码的文件(例如图像文件)添加到我们的Web项目中,但不包含在由WiX构建的MSI安装程序中.
为了帮助防止这种情况,我想在我们的WiX项目的AfterBuild目标中执行以下操作:
如果我启动Orca,我可以很容易地看到File表并计算,但我不知道如何从MSBuild自动执行此操作.是否有一些API或其他机制可以从MSI中获取此信息?
我不介意编写自定义MSBuild任务来提取MSI文件表计数.
基于测试一个包含~220个元素的页面,其中〜200个是复选框元素,并且每个元素必须查询一个包含~200个项目的数组,我很惊讶地发现输入选择器:
$("input[id$='" + code + "']").each(function() { //...
Run Code Online (Sandbox Code Playgroud)
大约快4-5倍
$("input:checkbox[id$='" + code + "']").each(function() { //...
Run Code Online (Sandbox Code Playgroud)
并且比复选框选择器快大约10倍:
$(":checkbox[id$='" + code + "']").each(function() { //...
Run Code Online (Sandbox Code Playgroud)
还尝试了通用选择器*,它的表现大致相同input.
我很想知道为什么这么大的性能差异?
与此问题类似,除了在WPF应用程序中包含的控制台程序产生彩色输出,因此如果我可以捕获颜色和文本,那将是很好的.
这是我的第一个WPF程序,我不知道如何去寻找/修改正确的控件,目前我只是使用一个可以工作但只能捕获纯文本的TextBox.
更新:我尝试使用RichTextBox:
richTextBox.Document.Blocks.Clear();
richTextBox.Document.Blocks.Add(new Paragraph(new Run(process.StandardOutput.ReadToEnd())));
Run Code Online (Sandbox Code Playgroud)
唉它只显示了纯文本.
我继承了一些使用div将页面分成标签的代码.在第一页上有许多必需的字段和正则表达式验证器.问题是用户可以切换到另一个选项卡,触发回发并使第一页上的验证器失败,使事情陷入混乱.
我希望能够做的是在用户选择另一个选项卡时在第一页上执行验证,从而防止它们移动到新选项卡,直到第一页有效.
<ul>
<li><a href="#tab1">Tab 1</a> </li>
<li><a href="#tab2" onclick="return isValid();">Tab 2</a></li>
<li><a href="#tab3" onclick="return isValid();">Tab 3</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
哪里isValid需要关闭验证器.
谢谢!
更新: codeka提供的答案非常接近,但是,因为我需要提供href和onclick属性(以避免弄乱显示),即使验证失败,选项卡(锚)仍然会发生.这就是我解决这个问题的方法.免责声明:未来的丑陋代码
<ul>
<li><a id="tab1Tab" href="#tab1" style="display:none"/><a onclick="isValid('tab1');">Tab 1</a></li>
<li><a id="tab2Tab" href="#tab2" style="display:none"/><a onclick="isValid('tab2');">Tab 2</a></li>
<li><a id="tab3Tab" href="#tab3" style="display:none"/><a onclick="isValid('tab3');">Tab 3</a></li>
</ul>
function isValid(tab) {
var valid = Page_ClientValidate();
var tabId = (valid ? tab : "tab1") + "Tab";
$("#" + tabId).click();
}
Run Code Online (Sandbox Code Playgroud)
注意使用jQuery实现与click事件的跨浏览器兼容性.这只有在其他选项卡上没有验证器的情况下才有效,根据Thomas的回答,isValid如果有任何补充,我需要使用验证组和额外的逻辑.
我有一个包含大量数据的ListView(200多个项目),所以为了节省空间,它使用UniformGrid来显示3列而不是1列
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="3" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
Run Code Online (Sandbox Code Playgroud)
我还修改了样式,以便每个项目都与顶部对齐
<ListView.Resources>
<Style TargetType="{x:Type ListView}">
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ListViewItem">
<Setter Property="VerticalContentAlignment" Value="Top"/>
</Style>
</Setter.Value>
</Setter>
</Style>
</ListView.Resources>
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但是由于显示的数据长度不同,项目组中仍然存在空间浪费,因为大多数数据都适合单行,但偶尔会有一个占用2行或更多行的项目.这意味着当组中只有1行需要额外的空间时,组中的所有行都会占用2行或更多行

有谁知道如何解决这个问题,或者可以建议另一种方法来避免统一网格?谢谢!
问候,
我想直观地显示后台进程何时工作。此过程定期发生(例如每 30 秒),可能需要 10 毫秒或 1000 毫秒以上才能完成。我正在使用 MVVM-Light 框架,因此创建了一个数据触发器,连接到淡入和淡出的心脏图像上的视图模型属性。
当该过程需要一秒或更长的时间时,我的业余动画技术正在发挥作用,但我也希望它在该过程需要很短的时间(<100ms)时完成完整的心跳(2次重复),否则动画也会结束很快,您无法(从视觉上)看出该过程正在运行。
问题是心脏应该在整个过程中保持跳动,所以我不能只将重复行为设置为 2。XAML 解决方案是首选,但如果需要一些后面的代码,我不会畏缩:)
<Image
Height="60" Width="60" Margin="0,6,6,6"
Name="Heartbeat" Source="/Resources/Heartbeat.png"
VerticalAlignment="Bottom" HorizontalAlignment="Right"
Opacity=".05" Stretch="UniformToFill">
<Image.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding IsHeartBeating}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard Name="HeartbeatStoryboard">
<Storyboard RepeatBehavior="Forever">
<DoubleAnimation
Storyboard.TargetProperty="Opacity"
From="0.05" To="0.8" Duration="0:0:0.100">
</DoubleAnimation>
<DoubleAnimation
Storyboard.TargetProperty="Opacity"
From="0.8" To="0.05" Duration="0:0:0.300">
<DoubleAnimation.EasingFunction>
<PowerEase EasingMode="EaseOut" Power="6" />
</DoubleAnimation.EasingFunction>
</DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<StopStoryboard BeginStoryboardName="HeartbeatStoryboard" />
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
Run Code Online (Sandbox Code Playgroud)
如果有人对如何改进心跳动画有任何建议,我愿意接受建议,谢谢!
我试图弄清楚如何创建一个由多列分区的序列,其中序列必须在另一个(基于日期)列不连续时重置.
问题:医院ADT(入院/出院/转院)事件发生在特定时间点,但我们希望将这些事件转变为具有持续时间(时间跨度)的活动,即我们有开始日期,但没有结束日期,基于下一个适当的ADT事件.我们已在代码中完成此操作,但也希望在SQL中执行此操作以提高性能.例如,找到在ICU中度过超过48小时的患者.
我们希望记录六个不同级别的站点位置:设施,护理点,建筑物,楼层,房间和床.
例:
Stream Event Started Facility PointOfCare ...
1 1 2015-01-01 09:05 Hospital-A ICU
1 2 2015-01-02 13:10 Hospital-A WARD-1
2 3 2015-02-10 12:00 Hospital-A ICU
2 4 2015-02-11 12:00 Hospital-A ICU
2 5 2015-02-12 04:30 Hospital-A WARD-2
Run Code Online (Sandbox Code Playgroud)
因此,对于每个事件,我们想知道它们在每个特定站点位置的时间长度.每个流中最后一个活动的结束日期为空(仍为住院病人)或病人出院的日期.
这是我目前的解决方案:
-- Create a sequence for each site location
INSERT INTO ADT_Activity_Sequence
SELECT
[Stream],
[Event],
[Started],
[Facility],
ROW_NUMBER() OVER (PARTITION BY [Stream],
ISNULL([Facility], [Event])
ORDER BY [Started]) AS [FacilitySequence],
[PointOfCare],
ROW_NUMBER() OVER (PARTITION BY [Stream],
ISNULL([Facility], [Event]),
ISNULL([PointOfCare], [Event]) …Run Code Online (Sandbox Code Playgroud) wpf ×3
c# ×2
wix ×2
wix3 ×2
.net ×1
asp.net ×1
jquery ×1
listview ×1
mvvm-light ×1
orca ×1
performance ×1
security ×1
sql ×1
sql-server ×1
uniformgrid ×1
validation ×1
wix3.5 ×1
wpf-controls ×1
xaml ×1
xml ×1