wpf - 为什么我的 Powershell WPF 数据绑定拉 System.Windows.Controls.ComboBoxItem: Test 1 而不是 Test 1
问题描述
我正在学习如何使用 Powershell 创建 WPF 表单。I have a ComboBox full of items, and when selected, they should populate a TextBox. 我使用数据绑定将 TextBox 的 Text 属性连接到当前选定的 ComboBox 项。但是当我选择一个项目时,它会填充为
System.Windows.Controls.ComboBoxItem: Test 1
而不是Test 1
.
[xml]$Form = @"
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Title="Test Window" Height="200" Width="400">
<StackPanel>
<ComboBox Name="ComboBox1" Margin="10">
<ComboBoxItem>Test 1</ComboBoxItem>
<ComboBoxItem>Test 2</ComboBoxItem>
</ComboBox>
<TextBox Name="textBox" Margin="10" Text="{Binding ElementName=ComboBox1, Path=SelectedValue}"/>
</StackPanel>
</Window>
"@
$NR=(New-Object System.Xml.XmlNodeReader $Form)
$WIN=[Windows.Markup.XamlReader]::Load( $NR )
$WIN.Showdialog()
我已经在 C# 中看到了一些其他方法来执行此操作,但我试图将其作为一个 Powershell 脚本来执行。
解决方案
最好的方法可能是使 ComboBox 可编辑并丢弃基于 TextBox 的方法:
<ComboBox Name="ComboBox1" Margin="10" IsEditable="True">
...
这使用户不仅可以从下拉列表中选择文本 (ComboBoxItems),还允许他们在 ComboBoxItems 本身保持不变/未更改的情况下输入和修改当前文本。
但是,如果确实需要通过 TextBox 更改 ComboBoxItems 本身的文本,则需要绑定Content
ComboBoxItem 的属性。像这样:
<TextBox Name="textBox" Margin="10" Text="{Binding SelectedItem.Content, ElementName=ComboBox1}"/>
编辑文本框中的文本后,组合框中的项目将相应更改(当文本框失去焦点时)。
如果您希望 ComboBoxItem “实时”跟随文本框中的编辑,请将绑定更改为:
Text="{Binding SelectedItem.Content, ElementName=ComboBox1, UpdateSourceTrigger=PropertyChanged}"
推荐阅读
- oauth-2.0 - Acumatica 在刷新 OAuth 2 访问令牌时抛出 500 服务器异常
- javascript - 如何从承诺中获取数据?
- amazon - 亚马逊 MWS API 不再返回个人信息
- mysql - 如何使用 Angular 防止多对多表中的重复实体
- javascript - 简单的队列系统在 javascript 中不起作用
- android - Android Chrome 中的静默打印
- graphql - 在 GraphQL 查询“where”对象中使用“or”
- get - access-control-allow-origin is not allowed 错误,但如果省略,则从获取请求 Flutter web 中预期
- android - 我可以自定义 Android 默认提供的 TimePicker 或 DatePicker 吗?
- python - 将行重塑为列组