2015-11-07 3 views
0

(я читал подобные сообщения, но все они имели поворот к ним, что сделало решение другого)Установить выбранный элемент в WPF ComboBox

Я портирование приложения WinForms, который использовал это:

myComboBox.SetSelected(myComboBox.FindString("Some Text"), true); 

для выбора элемента программно. При переносе к WPF, я попробовал это, но это не имеет никакого эффекта (элемент не выбран):

myComboBox.SelectedItem = myComboBox.FindName("Some Text"); 

Что такое правильный способ выбрать существующий элемент в ComboBox в WPF?

+0

Ваш источник товаров? – Sajeetharan

+0

Вы можете найти ответ здесь https://www.google.com.ph/url?sa=t&source=web&rct=j&url=http://stackoverflow.com/questions/21476979/why-does-the-combobox-findname -метод-всегда-возвратный нуль и веды = 0CBwQFjAAahUKEwiEoZyk1v3IAhUD5KYKHew9DuQ & USG = AFQjCNGMrZHFUpcCyZhk-L8amDlp_mxSIg & Sig2 = KwxsuSAuv6UKhLJYOOlhVw – tgpdyk

+1

ответ зависит от вашего кода, [который вы не предоставили] (http://stackoverflow.com/help/mcve). Даже пример Winforms, который вы показываете, откровенно не очень подходит. В WPF у вас должна быть коллекция, связанная с 'ComboBox.ItemsSource', и вы можете установить' SelectedItem' ссылку на элемент этой коллекции. Как вы его просматриваете, это будет зависеть от точной реализации кода. –

ответ

1

Вы должны использовать SelectedValue. В WPF ComboBox существует несколько способов добиться того же. Таким образом, один синтаксис для выбора элемента программно не будет работать. Существуют различные способы добавления элементов в ComboBox.

  1. Вы можете установить ItemsSource как декларативно, так и в коде.
  2. Вы можете добавить ComboBoxItems и т. Д. Смотрите свойство Items в окне свойств, чтобы просмотреть доступные типы элементов.

Если вы используете ItemsSource со строковыми значениями, то вам нужно синтаксис как: cmb1.SelectedValue = "Name1"

Если вы непосредственно добавления элементов, как <ComboBox ...> <ComboBoxItem Content="Name1"/> </ComboBox/>, то вам нужно

foreach (ComboBoxItem item in cmb2.Items) 
     if (item.Content.ToString() == "Name1") 
     { 
     cmb2.SelectedValue = item; 
     break; 
     } 

Я разместил полный который показывает, как выбрать элемент программно в различных сценариях. Пример кода (может использоваться как есть):

Обратите внимание на последний, где вы должны использовать SelectedValuePath.

Window1.xaml

<Window x:Class="WpfApplicationBlend.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:sys="clr-namespace:System;assembly=mscorlib" 
    Title="Window1" Height="411" Width="749"> 

<Grid> 
    <Grid Margin="30,27,491,276"> 
     <ComboBox x:Name="cmb1" HorizontalAlignment="Left" Margin="0,28,0,0" VerticalAlignment="Top" Width="210" Height="25" FocusVisualStyle="{DynamicResource StyleFocusDefault}"> 
      <ComboBox.ItemsSource> 
       <CompositeCollection> 
        <sys:String>Name1</sys:String> 
        <sys:String>Name2</sys:String> 
        <sys:String>Name3</sys:String> 
        <sys:String>Name4</sys:String> 
       </CompositeCollection> 
      </ComboBox.ItemsSource> 
     </ComboBox> 
     <TextBox x:Name="tbInput1" HorizontalAlignment="Left" Height="23" Margin="10,0,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/> 
     <Button Content="Button" HorizontalAlignment="Left" Margin="135,1,0,0" VerticalAlignment="Top" Width="75" Click="Button1_Click"/> 
    </Grid> 

    <Grid Margin="405,27,111,276"> 
     <ComboBox x:Name="cmb2" HorizontalAlignment="Left" Margin="0,28,0,0" VerticalAlignment="Top" Width="210" Height="25" FocusVisualStyle="{DynamicResource StyleFocusDefault}"> 
      <ComboBoxItem Content="Name1"/> 
      <ComboBoxItem Content="Name2"/> 
      <ComboBoxItem Content="Name3"/> 
     </ComboBox> 
     <TextBox x:Name="tbInput2" HorizontalAlignment="Left" Height="23" Margin="10,0,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/> 
     <Button Content="Button" HorizontalAlignment="Left" Margin="135,1,0,0" VerticalAlignment="Top" Width="75" Click="Button2_Click"/> 
    </Grid> 

    <Grid Margin="30,207,491,96"> 
     <ComboBox x:Name="cmb3" HorizontalAlignment="Left" Margin="0,28,0,0" VerticalAlignment="Top" Width="210" Height="25" FocusVisualStyle="{DynamicResource StyleFocusDefault}"> 
      <ComboBox.ItemsSource> 
       <CompositeCollection> 
        <sys:String>Name1</sys:String> 
        <sys:Boolean>True</sys:Boolean> 
        <sys:Int32>123</sys:Int32> 
       </CompositeCollection> 
      </ComboBox.ItemsSource> 
     </ComboBox> 
     <TextBox x:Name="tbInput3" HorizontalAlignment="Left" Height="23" Margin="10,0,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/> 
     <Button Content="Button" HorizontalAlignment="Left" Margin="135,1,0,0" VerticalAlignment="Top" Width="75" Click="Button3_Click"/> 
    </Grid> 

    <Grid Margin="405,207,116,96"> 
     <ComboBox x:Name="cmb4" HorizontalAlignment="Left" Margin="0,28,0,0" VerticalAlignment="Top" Width="210" Height="25" SelectedValuePath="Name" DisplayMemberPath="Name"> 
     </ComboBox> 
     <TextBox x:Name="tbInput4" HorizontalAlignment="Left" Height="23" Margin="10,0,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/> 
     <Button Content="Button" HorizontalAlignment="Left" Margin="135,1,0,0" VerticalAlignment="Top" Width="75" Click="Button4_Click"/> 
    </Grid> 
</Grid> 
    </Window> 

Window1.xaml.cs

using System; 
using System.Collections.Generic; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 
using System.Collections; 

namespace WpfApplicationBlend 
{ 
    /// <summary> 
    /// Interaction logic for Window1.xaml 
    /// </summary> 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      List<Employee> employees = new List<Employee>() 
      { 
       new Employee(){Name="Name1", Age=100}, 
       new Employee(){Name="Name2", Age=101}, 
      }; 

      cmb4.ItemsSource = employees; 
     } 

     private void Button1_Click(object sender, RoutedEventArgs e) 
     { 
      cmb1.SelectedValue = tbInput1.Text; 
     } 

     private void Button2_Click(object sender, RoutedEventArgs e) 
     { 
      foreach (ComboBoxItem item in cmb2.Items) 
       if (item.Content.ToString() == tbInput2.Text) 
       { 
        cmb2.SelectedValue = item; 
        break; 
       } 
     } 

     private void Button3_Click(object sender, RoutedEventArgs e) 
     { 
      foreach (object item in cmb3.Items) 
       if (item.ToString() == tbInput3.Text) 
       { 
        cmb3.SelectedValue = item; 
        break; 
       } 
     } 

     private void Button4_Click(object sender, RoutedEventArgs e) 
     { 
      cmb4.SelectedValue = tbInput4.Text; 
     } 
    } 

    public class Employee 
    { 
     public string Name { get; set; } 
     public int Age { get; set; } 
    } 
} 
-1
comboboxName.SelectedIndex = yourIndex; 

например,

combobox1.SelectedIndex = 2; 
Смежные вопросы