Почему моя привязка данных Powershell WPF тянет System.Windows.Controls.ComboBoxItem: тест 1 вместо теста 1 - PullRequest
0 голосов
/ 28 ноября 2018

Я учусь использовать Powershell для создания форм WPF.У меня есть ComboBox, полный элементов, и при выборе они должны заполнять TextBox.Я использовал привязку данных для соединения свойства Text TextBox с текущим выбранным элементом 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.

1 Ответ

0 голосов
/ 28 ноября 2018

Лучший подход, вероятно, состоит в том, чтобы просто сделать ComboBox редактируемым и отказаться от подхода на основе TextBox:

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

Это позволяет пользователям не только выбирать текст (ComboBoxItems) из раскрывающегося списка, но ипозволяет им вводить и изменять текущий текст, в то время как сами ComboBoxItems остаются нетронутыми / неизменными.


Однако, если действительно необходимо изменить текст самих ComboBoxItems через TextBox, вам потребуетсяпривязка к свойству Content объекта ComboBoxItem.Например:

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

После редактирования текста в текстовом поле элемент в ComboBox изменится соответствующим образом (когда текстовое поле потеряет фокус).

Если вы хотите, чтобы ComboBoxItem следовал заредактирует в текстовом поле в режиме реального времени, измените привязку на:

Text="{Binding SelectedItem.Content, ElementName=ComboBox1, UpdateSourceTrigger=PropertyChanged}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...