我想在空格上拆分管道的每一行,然后在自己的行上打印每个令牌.
我意识到我可以使用以下方法获得此结果:
(cat someFileInsteadOfAPipe).split(" ")
Run Code Online (Sandbox Code Playgroud)
但我想要更多的灵活性.我希望能够对每个令牌做任何事情.(我曾经在Unix 上使用AWK,而我正试图获得相同的功能.)
我目前有:
echo "Once upon a time there were three little pigs" | %{$data = $_.split(" "); Write-Output "$($data[0]) and whatever I want to output with it"}
Run Code Online (Sandbox Code Playgroud)
显然,它只打印第一个令牌.有没有办法让我在每个令牌上依次打印?
此外,%{$data = $_.split(" "); Write-Output "$($data[0])"}我从博客获得的部分,我真的不明白我在做什么或语法是如何工作的.
我想谷歌,但我不知道该怎么称呼它.请帮我一两句话给谷歌,或者链接向我解释这些%和所有$符号的作用,以及开始和结束括号的重要性.
我意识到我实际上无法使用(cat someFileInsteadOfAPipe).split(" "),因为文件(或更好的传入管道)包含多行.
关于一些答案:
如果Select-String在令牌化之前用于过滤输出,则需要记住Select-String命令的输出不是字符串的集合,而是MatchInfo对象的集合.要获取要拆分的字符串,需要访问对象的Line属性MatchInfo,如下所示:
cat someFile | Select-String "keywordFoo" | %{$_.Line.Split(" ")}
Run Code Online (Sandbox Code Playgroud) 我正在使用MVVM模式处理WPF桌面应用程序.
我试图ListView根据输入的文本过滤一些项目TextBox.我希望在ListView更改文本时过滤项目.
我想知道在过滤器文本更改时如何触发过滤器.
在ListView绑定到CollectionViewSource,它绑定到ObservableCollection我的视图模型.该TextBox用于过滤文字结合在视图模型的字符串,UpdateSourceTrigger=PropertyChanged,因为它应该是.
<CollectionViewSource x:Key="ProjectsCollection"
Source="{Binding Path=AllProjects}"
Filter="CollectionViewSource_Filter" />
<TextBox Text="{Binding Path=FilterText, UpdateSourceTrigger=PropertyChanged}" />
<ListView DataContext="{StaticResource ProjectsCollection}"
ItemsSource="{Binding}" />
Run Code Online (Sandbox Code Playgroud)
Filter="CollectionViewSource_Filter"指向后面代码中的事件处理程序的链接,它只是在ViewModel上调用过滤器方法.
当FilterText的值发生更改时进行过滤 - FilterText属性的setter调用FilterList方法,该方法迭代ObservableCollection我的ViewModel并boolean在每个项目ViewModel上设置FilteredOut属性.
我知道过滤器文本更改时FilteredOut属性会更新,但List不会刷新.该CollectionViewSource当我切换远离它,并再次重新加载用户控件过滤事件仅触发.
我OnPropertyChanged("AllProjects")在更新过滤器信息后尝试过调用,但它没有解决我的问题.("AllProjects"是ObservableCollection我绑定到的ViewModel上的属性CollectionViewSource.)
CollectionViewSource当FilterText的值TextBox发生变化时,如何让自己重新过滤?
非常感谢
在调试控制台应用程序时,是否可以将Visual Studio设置为使用非标准控制台?
我不确定默认控制台是什么,它看起来就像cmd.exe.当我调试时,我真的很喜欢我的控制台应用程序在ConEmu中运行.
为了清楚起见,我想点击"开始调试",这个过程应该像往常一样发生,但是不cmd.exe应该打开一个控制台,它应该调出一个ConEmu控制台(或其他).
我正在使用Visual Studio 2010 Pro
与此(未答复)问题密切相关:使用Console2进行Visual Studio调试?
如果我通过USB连接数码相机,Windows资源管理器会将其作为设备列在计算机下.我可以使用资源管理器浏览它,查看文件夹,文件属性等,以及复制/删除文件.
这一切都没有将相机设置为存储设备(在这种情况下,我相信相机将显示为闪存驱动器,带有指定的驱动器号,使这很容易).
有没有办法让我使用Windows PowerShell访问和浏览相机上的文件和文件夹?据我所知,没有(自动)分配给设备的驱动器号.
我不是在寻找变通方法 - 我可以使用资源管理器复制文件,而不是问题.我问,因为我想玩PowerShell :-)
谢谢
我设法Win32PnPEntity使用以下内容获取相机的对象:
Get-WmiObject Win32_USBControllerDevice | ForEach-Object { $_; [Wmi]$_.Dependent }
接下来Get-WmiObject win32_pnpentity -filter "name='Canon PowerShot A480'"使用我从上一个命令获得的名称(PNPDeviceID可能是一个更好的选择,但名称更容易键入:P)
但是,我不知道我是否可以对该Win32PnPEntity对象做任何有用的事情.
我在纳米比亚工作.纳米比亚不是Windows区域和语言设置的选项,但与南非共享大多数文化细节,因此我们选择英语南非,然后将货币符号自定义为"N $"(纳米比亚元)而不是"R"(南非兰特).
但是,我无法说服WPF使用自定义货币.string.format("{0:c}", foo)在代码中使用工作正常,但{Binding Path=SomeCurrencyValue, StringFormat=c在XAML中使用}`仍然使用"R"符号而不是自定义"N $"符号.
在App.xaml.cs我使用以下代码设置应用程序文化:
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(System.Globalization.CultureInfo.CurrentCulture.LCID, true);
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),
new FrameworkPropertyMetadata(
System.Windows.Markup.XmlLanguage.GetLanguage(
System.Globalization.CultureInfo.CurrentUICulture.IetfLanguageTag)));
Run Code Online (Sandbox Code Playgroud)
作为演示,这里有一些显示问题的XAML代码:
<StackPanel>
<TextBlock>
Formatted in XAML with: <LineBreak/>
Text="{Binding Path=SomeCurrencyValue, StringFormat=c}" <LineBreak/>
Result:
</TextBlock>
<TextBox Text="{Binding Path=SomeCurrencyValue, StringFormat=c, Mode=OneWay}"
Margin="5"/>
<TextBlock>
Formatted in code with: <LineBreak/>
return string.Format("{0:c}", SomeCurrencyValue); <LineBreak/>
Result:
</TextBlock>
<TextBox Text="{Binding Path=SomeCurrencyString, Mode=OneWay}"
Margin="5"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
在DataContext对上述观点包含以下内容:
public double SomeCurrencyValue
{
get { return 34.95; }
}
public string SomeCurrencyString …Run Code Online (Sandbox Code Playgroud) 我正在拉动网站的来源.然后我想提取它的一个特定部分.我的目的是使用LINQ-to-XML来做到这一点.
但是,当我解析源代码时出现错误:
XElement source = XElement.Load(reader);
Run Code Online (Sandbox Code Playgroud)
问题似乎是对我没有的命名空间的引用.我收到错误:'addthis' is an undeclared prefix. Line 130, position 51.由于这一行:
<div class="addthis_toolbox addthis_pill_combo" addthis:url="http://www.foo.com/foo">
Run Code Online (Sandbox Code Playgroud)
如果我删除那个,其他的发生.
事实上,我只关心这个XML文件的一部分 - 我不需要能够解析整个文件.我只是想在一个XElement中,所以我可以找到它的一部分.有没有办法解决解析错误?我需要一个通用的解决方案 - 我想解析文件而不管任何undeclared prefix错误.
谢谢
我正在研究WPF桌面应用程序,我正在通过InstallShield Limited Edition生成的安装文件进行部署.我希望安装程序在安装新版本之前提示用户并删除任何以前版本的应用程序.我怀疑这是通过InstallShield中的Upgrade Paths选项完成的,但我无法理解.
答案转到解释或链接到一个体面的操作方法,教程或手册页面,以回答我的问题.
目前,在运行安装程序时,我得到:"已安装此产品的另一个版本.此版本的安装无法继续.要配置或删除此产品的现有版本,请使用"控制面板"上的"添加/删除程序". "
谢谢
使用MVVM结构处理WPF应用程序.
我的窗口显示一个菜单和当前的ViewModel.在Menu的MenuItem之一上,我想列出当前ViewModel中的一些命令.菜单中列出的命令将根据ViewModel而改变.
我得到了这个工作得很好,但风格搞砸了 - Command MenuItems在另一个菜单框或其他内容.我会附上截图.
我在ViewViewModel中包装了ViewModel的ICommand对象(在本例中为RelayCommands),它在菜单上公开了我想要的Command和Display字符串.这些CommandViewModel位于列表中:CurrentWorkspace.AdditionalOptionsCommands.
这是菜单的XAML.就像我说的那样,它起作用,它显示正确的项目并执行命令.显示是不正确的 - 任何人都可以告诉我为什么以及如何解决它?查看截图.
<Menu>
<MenuItem Header="_Additional Options..." ItemsSource="{Binding Path=CurrentWorkspace.AdditionalOptionsCommands}">
<MenuItem.ItemTemplate>
<DataTemplate DataType="{x:Type vm:CommandViewModel}">
<MenuItem Header="{Binding Path=DisplayText}" Command="{Binding Path=Command}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
<MenuItem Header="_Testing">
<MenuItem Header="This looks right" />
<MenuItem Header="This looks right" />
</MenuItem>
</Menu>
Run Code Online (Sandbox Code Playgroud)
目前的外观:

期望的外观:

嗨,我有一种通过调用重置数据对象的方法DataContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, Entity);。
捕获的是,传递给该方法的某些对象是来自数据上下文且已更改的对象,而其他一些则是新对象。新对象尚未附加到数据上下文,并且将被丢弃。
在DataContext.Refresh未附加对象上调用when时,System.ArgumentException由于DataContext对其不熟悉,因此我得到了。
有没有一种方法可以获取单个对象的跟踪状态(如此处定义:http : //msdn.microsoft.com/en-us/library/bb386982.aspx),因此我可以弄清楚它是否是修改后的对象或新对象?
问候
我正在开发一个MVVM应用程序(这里的示例不是很MVVM,它只是一个模型).
我有一个ListView绑定到TextItemViewModel实例集合的视图,其中的视图定义在TextItemView.每个TextItemView包含Grid一个Auto列和一列*填充.填充列包含TextBox用户可以输入文本的位置.
我希望TextItemViews填充ListView(这个工作)的水平空间,如下所示:

但是,当用户在框中输入长文本时,我希望它可以扩展Height但不能扩展Width.此刻,Width增加并ListView获得一个滚动条,如下所示:

我的ListView代码如下所示:(我已经取出了MVVM绑定代码并ItemsSource在此示例中设置了代码隐藏)
<ListView Name="listview"
SelectionMode="Single"
Margin="5"
MinHeight="50"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch" />
Run Code Online (Sandbox Code Playgroud)
我的TextItemView代码看起来像这样:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Button Content="SomeButton"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Margin="5"
Grid.Column="0" />
<TextBox Text="{Binding Path=NoteText}"
TextWrapping="Wrap"
AcceptsReturn="True"
AcceptsTab="True"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
HorizontalAlignment="Stretch"
Margin="5"
Grid.Column="1" />
</Grid> …Run Code Online (Sandbox Code Playgroud) 我希望有一个TextBox以货币格式显示的数字(通过设置 StringFormat=c绑定).当TextBox选择(何时IsKeyboardFocused==true)时,我希望格式化消失,直到焦点TextBox丢失为止.
我找到了一种方法,下面粘贴代码.我的问题是绑定是在Style- 内部指定的- 这意味着我必须重新键入TextBox我想要执行此操作的样式.理想情况下,我想把风格置于中心位置,并为每个人重复使用它,每个都有TextBox不同的绑定目标.
有没有办法让我使用a Style在现有绑定上设置参数,比如Text.Binding.StringFormat=""?(而不是将Text的整个值设置为新定义的Binding)
其他建议也将受到赞赏.
代码(这是有效的,它只是不方便):
<TextBox x:Name="ContractAmountTextBox">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsKeyboardFocused, ElementName=ContractAmountTextBox}" Value="False">
<Setter Property="Text" Value="{Binding Path=ContractAmount, UpdateSourceTrigger=LostFocus, StringFormat=c}"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsKeyboardFocused, ElementName=ContractAmountTextBox}" Value="True">
<Setter Property="Text" Value="{Binding Path=ContractAmount, UpdateSourceTrigger=LostFocus}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
Run Code Online (Sandbox Code Playgroud)
当我的WPF MVVM应用程序试图在主窗口启动之前显示两个连续的错误对话框窗口时,我接受了这个(付出了一些努力):在第一个窗口打开之后,应用程序进入循环并且第二个错误对话框从未出现过.
我解决了这个问题,但我希望有人可以告诉我为什么会这样.
看来,如果没有非模态打开窗口,如果关闭了一个对话框窗口,则所有新对话窗口都会立即关闭,而不显示.
它很容易重现,所以这里有一些高度自负的代码来说明问题.这段代码是完整的,所以使用这个,你应该能够重现它.
为对话框窗口创建一个Window控件,后面没有代码,只有以下XAML:
<Window x:Class="ForumExampleShowDialogIssue.OKDialogWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="OKDialogWindow" Height="300" Width="300">
<StackPanel>
<TextBlock Text="This is a Window with a single button. The button is set to Cancel, so it closes the window."
TextWrapping="Wrap"
Margin="5"/>
<Button Content="OK" IsCancel="True" IsDefault="True"
Margin="5"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
接下来,使用标准WPF App类,在XAML中没有任何新内容,但后面的代码中包含以下内容:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
OKDialogWindow alwaysOpen = new OKDialogWindow();
alwaysOpen.Show();
while (true)
{
OKDialogWindow dialogWindow = new OKDialogWindow();
Console.WriteLine("Before show");
dialogWindow.ShowDialog();
Console.WriteLine("After show");
}
}
Run Code Online (Sandbox Code Playgroud)
删除MainWindow.XAML(如果存在),并从App.XAML标头中删除对它的引用.
跑.(该计划,不像森林).
这按预期工作.该alwaysOpen窗口保持打开状态,而一个接一个dialogWindow …
wpf ×6
mvvm ×3
powershell ×2
xaml ×2
c# ×1
command ×1
console ×1
cultureinfo ×1
currency ×1
data-binding ×1
datatemplate ×1
debugging ×1
dialog ×1
filter ×1
linq-to-sql ×1
listview ×1
localization ×1
menuitem ×1
modal-dialog ×1
showdialog ×1
string ×1
styles ×1
textbox ×1
tokenize ×1
uninstall ×1
upgrade ×1
window ×1
xelement ×1
xml ×1