Получить текст 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;
}