3

如何在 C# 中使用 RadControls Q1 2013 获取 RadAutoCompleteBox 的文本?

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...
                // ...
                // ...
            };
    }
}
4

3 回答 3

3

你应该从SelectedItem物业拿走它。将其投射到您的班级,然后从MyClass.ACommand

我建议在您的 ViewModel 中绑定SelectedItemwithMode=TwoWay会很有帮助。

只需向 ViewModel 添加一个成员,该成员正在实现命令,例如:

private Command _SelectedItem;

public Command SelectedItem 
{ 
   //get set with INotifyPropertyChanged 
}

然后从 xaml:绑定 RadAutoCompleteBox 的 SelectedItem 属性,如:

SelectedItem="{Binding SelectedItem, Mode=TwoWay}"
于 2013-04-09T06:42:06.610 回答
1

我已经重现了这个问题。

是的。我有same problem。我found也是问题和答案。

由于在我的视图模型中对所选项目使用类型字符串,我遇到了问题。

private string selectedCommand;

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

使用类型作为命令类,您的问题将得到解决。

private Command selectedCommand;

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

Bind中的SelectedItem财产RadAutoCompleteBoxXAML

<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");
    }
}

并将其绑定到SelectedItemsRadAutoCompleteBox 控件的属性(SelectedItem 的复数)。

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

并确保您已启动 SelectedItems。

this.SelectedCommands = new ObservableCollection<Command>();
于 2013-04-09T08:37:41.540 回答
0

SearchText属性RadAutoCompleteBox应该为您提供价值。

根据文档,它获取或设置进入 RadAutoCompleteBox 的 TextBox 部分的字符串。SearchText 值用于过滤 RadAutoCompleteBox 的 ItemsSource。

如果要获取 AutocompleteBox 选中项的“文本”,则需要将其强制转换为指定类型。在您的情况下,它是 type ServerCrafterTelerikWPF.Command

var selectedItem = autoCompleteBox.SelectedItem;

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

  string textOfAutoCompleteBox = selectedCommand.ACommand;
}
于 2013-04-09T06:36:31.150 回答