Получить текст RadAutoCompleteBox

Как я могу получить текст RadAutoCompleteBox, используя RadControls Q1 2013 в C#?

autoCompleteBox.SelectedItem возвращается "ServerCrafterTelerikWPF.Command",

Редактировать 1: Вот мой XAML:

<telerik:RadAutoCompleteBox x:Name="txtboxCommand" ItemsSource="{Binding Commands, Source={StaticResource ViewModel}}" 
DisplayMemberPath="ACommand"  AutoCompleteMode="Append" HorizontalAlignment="Left" 
telerik:StyleManager.Theme="Modern" Margin="280,405,0,0" 
VerticalAlignment="Top" Width="330" Height="30" KeyDown="txtboxCommand_KeyDown"/>

И у меня нет кода C#. Я просто хочу, когда кнопка нажата, чтобы получить текст, который находится в RadAutoCompleteBox.

Редактировать 2: И вот мой collection:

public class Command
{
    public string ACommand { get; set; }
}

/// <summary>
/// A view model for MainWindow.xaml
/// </summary>
public class ViewModel
{
    public ObservableCollection<Command> Commands { get; set; }

    public ViewModel()
    {
        Commands = new ObservableCollection<Command>()
            {
                new Command() {ACommand = "stop "},
                // Other commands...
                // ...
                // ...
            };
    }
}

3 ответа

Решение

Вы должны взять это из SelectedItem имущество. Примените его к своему классу, а затем получите его от MyClass.ACommand

И я предлагаю обязательный SelectedItem с Mode=TwoWay в вашей ViewModel может сильно помочь.

Просто добавьте члена в ViewModel, который реализует команду как:

private Command _SelectedItem;

public Command SelectedItem 
{ 
   //get set with INotifyPropertyChanged 
}

Затем из свойства xaml: Bind SelectedItem объекта RadAutoCompleteBox, например:

SelectedItem="{Binding SelectedItem, Mode=TwoWay}"

Я воспроизвел проблему.

Да. У меня был same problem, И я found проблема и ответ тоже.

Я получил проблему из-за использования строки типа для выбранного элемента в моей модели представления.

private string selectedCommand;

public string SelectedCommand
{
    get
    {
        return selectedCommand;
    }
    set
    {
        selectedCommand = value;
        NotifyPropertyChanged("SelectedCommand");
    }
}

Используйте тип как класс Command, и ваша проблема будет решена.

private Command selectedCommand;

public Command SelectedCommand
{
    get
    {
        return selectedCommand;
    }
    set
    {
        selectedCommand = value;
        NotifyPropertyChanged("SelectedCommand");
    }
}

Bind SelectedItem собственность RadAutoCompleteBox в XAML

<telerik:RadAutoCompleteBox 
            x:Name="txtboxCommand" 
            ItemsSource="{Binding Commands, Source={StaticResource ViewModel}}" 
            DisplayMemberPath="ACommand"  
            AutoCompleteMode="Append" 
            HorizontalAlignment="Left" 
            telerik:StyleManager.Theme="Modern" 
            Margin="280,405,0,0" 
            VerticalAlignment="Top" 
            Width="330" 
            Height="30" 
            KeyDown="txtboxCommand_KeyDown"
            SelectedItem="{Binding SelectedCommand, Mode=TwoWay}"/>

Если вы хотите получить выделенный элемент по выделенному коду, преобразуйте выбранный элемент в тип класса Command.

var selectedItem = autoCompleteBox.SelectedItem as Command;

И на самом деле может быть multiple selected items, В этом случае вы должны определить collection of Command objects,

private ObservableCollection<Command> selectedCommands;

public ObservableCollection<Command> SelectedCommands
{
    get
    {
        return selectedCommands;
    }
    set
    {
        selectedCommands = value;
        NotifyPropertyChanged("SelectedCommands");
    }
}

И связать это с SelectedItems свойство (множественное число от SelectedItem) элемента управления RadAutoCompleteBox.

SelectedItems="{Binding SelectedCommands, Mode=TwoWay}"

И убедитесь, что вы инициировали SelectedItems.

this.SelectedCommands = new ObservableCollection<Command>();

SearchText собственность RadAutoCompleteBox должен предоставить вам значение.

В соответствии с документацией он получает или устанавливает строку, которая находится в части TextBox RadAutoCompleteBox. Значение SearchText используется для фильтрации RadasutoCompleteBox' ItemsSource.

Если вы хотите получить "Текст" выбранного элемента AutocompleteBox, то вам нужно привести его к указанному типу. В вашем случае это типа ServerCrafterTelerikWPF.Command,

var selectedItem = autoCompleteBox.SelectedItem;

if (selectedItem is ServerCrafterTelerikWPF.Command) {
  var selectedCommand = selectedItem as ServerCrafterTelerikWPF.Command;

  string textOfAutoCompleteBox = selectedCommand.ACommand;
}
Другие вопросы по тегам