为什么我的Powershell WPF数据绑定拉System.Windows.Controls.ComboBoxItem:测试1而不是测试1

时间:2018-11-27 21:03:37

标签: wpf powershell

我正在学习如何使用Powershell创建WPF表单。我有一个充满项目的ComboBox,并且在选中后,它们应该填充一个TextBox。我使用数据绑定将TextBox的Text属性连接到当前选择的ComboBox项。但是当我选择一个项目时,它会填充为
System.Windows.Controls.ComboBoxItem: Test 1,而不只是Test 1

Example Program Output

[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脚本来执行。

1 个答案:

答案 0 :(得分:0)

最好的方法可能只是使ComboBox可编辑,而放弃基于TextBox的方法:

<ComboBox Name="ComboBox1" Margin="10" IsEditable="True"> 
    ...

这不仅允许用户从下拉菜单中选择文本(ComboBoxItems),而且允许用户输入和修改当前文本,而ComboBoxItems本身保持不变/不变。


但是,如果确实希望通过文本框更改ComboBoxItems本身的文本,则需要与ComboBoxItem的Content属性绑定。像这样:

<TextBox Name="textBox" Margin="10" Text="{Binding SelectedItem.Content, ElementName=ComboBox1}"/>

在文本框中编辑文本之后,组合框中的项目将相应更改(当文本框失去焦点时)。

如果您希望ComboBoxItem以“实时”方式跟随文本框中的编辑,请将绑定更改为:

Text="{Binding SelectedItem.Content, ElementName=ComboBox1, UpdateSourceTrigger=PropertyChanged}"