2010-05-18 19 views

Respuesta

14

Nuestro enfoque exitoso para la unión de un cuadro combinado es la siguiente ...

<ComboBox 
    ItemsSource="{Binding Path=AllItems}" 
    SelectedItem={Binding Path=CurrentItem, Mode=TwoWay} /> 
<TextBlock Text="{Binding Path=CurrentItem, Mode=TwoWay}" /> 

class public ItemListViewModel 
{ 
    public ObservableCollection<Item> AllItems {get; set;} 

    private Item _currentItem; 
    public Item CurrentItem 
    { 
     get { return _currentItem; } 
     set 
     { 
      if (_currentItem == value) return; 
      _currentItem = value; 
      RaisePropertyChanged("CurrentItem"); 
     } 
    } 
} 
+1

esto es extraño. Juraría que hice exactamente lo que usted ha sugerido antes, porque lo leí en algunos blogs ... Ahora lo intenté de nuevo y funcionó: P Mientras tanto me ayudó con esto si alguien está interesado XD // Establezca el nuevo Schoolclass creado como índice seleccionado en el control de IU .. SelectedSchoolclassIndex = (Schoolclasses.Count! = 0)? Schoolclasses.Count - 1: 0; – msfanboy

+1

Acabo de tener este problema. Tenía 2 colecciones separadas, y olvidé el operador igual, por lo que el elemento actual se seleccionó de otra colección que la que asigné a XAML. Entonces la implementación de igual solucionó el problema. Pero seleccionar de la misma colección también solucionó el problema –

5

No estoy seguro de por qué no se pueden enlazar datos a SelectedItem en un ComboBox sin ver su código. A continuación, se muestra cómo hacerlo utilizando un CollectionView que tiene incorporada la administración de elementos actual compatible con comboboxes. CollectionView tiene una propiedad de obtención de CurrentItem que puede usar para obtener actualmente seleccionada.

XAML:

<Window x:Class="CBTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <StackPanel> 
     <ComboBox 
      ItemsSource="{Binding Path=Names}" 
      IsSynchronizedWithCurrentItem="True"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding}" /> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 
     <TextBlock Text="{Binding Path=Names.CurrentItem}" /> 
    </StackPanel> 
</Window> 

Código atrás:

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

namespace CBTest 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      DataContext = new VM(); 
     } 
    } 

    public class VM 
    { 
     public VM() 
     { 
      _namesModel.Add("Bob"); 
      _namesModel.Add("Joe"); 
      _namesModel.Add("Sally"); 
      _namesModel.Add("Lucy"); 

      Names = new CollectionView(_namesModel); 

      // Set currently selected item to Sally. 

      Names.MoveCurrentTo("Sally"); 
     } 

     public CollectionView Names { get; private set; } 

     private List<string> _namesModel = new List<string>(); 
    } 
} 
+0

" ... No estoy seguro de por qué no se pueden enlazar datos a SelectedItem en un ComboBox sin ver su código ... " hacer un google fácil es un problema muy amplio. CollectionView es una sobrecarga total en mi caso, además, puedo y no patearé mi ObservableCollection ya que lo necesito para add/del que CollectionView no tiene. – msfanboy

+0

Un CollectionView puede ser una vista de un ObservableCollection por lo que necesita patear cualquier cosa. ¿Qué quieres decir con que CollectionView es un gasto total? ¿Estás hablando de la otra funcionalidad que proporciona un CollectionView junto a Current, como el filtrado, la agrupación y la clasificación? Todavía no sé cuál es el problema vinculante selecteditem en un cuadro combinado. –

+0

No necesito un CollectionView; eso es ;-) Si quiero clasificar ese es el trabajo del control, en mi caso, DataGrid tiene esta funcionalidad. CollectionView es okish para una vista de lista que no ordena haciendo clic en el encabezado de la columna. – msfanboy

Cuestiones relacionadas