2016-05-01 2 views
2

Ich möchte, dass ein ComboBox einen voreingestellten vorgewählten Wert hat, in diesem Fall wäre es das erste Einzelteil im viewmodel.Wie man ein vorgewähltes vorgewähltes Einzelteil mit einem Listview/einem Kombinationsfeld uwp einstellt

<ComboBox Name="cat_choices" ItemsSource="{x:Bind ViewModel.Categories}" Width="300" VerticalAlignment="Center"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate x:DataType="local:Category">        
      <TextBlock Text="{x:Bind cat_name}"></TextBlock> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Von dem Viewmodel:

private ObservableCollection<Category> categories = new ObservableCollection<Category>(); 
public ObservableCollection<Category> Categories { get { return this.categories; } } 

Danke.

Antwort

1

erstellen 2 neue Eigenschaft in Ihrem Ansichtsmodell:

private int _SelectedIndex = 0; 

    public int SelectedIndex 
    { 
     get 
     { 
      return _SelectedIndex; 
     } 
     set 
     { 
      _SelectedIndex = value; 
      RaisePropertyChanged(nameof(SelectedIndex)); 
     } 
    } 

private Category _SelectedQuality = null; 
    public Category SelectedQuality 
    { 
     get 
     { 
      return _SelectedQuality; 
     } 
     set 
     { 
      _SelectedCategory = value; 
      RaisePropertyChanged(nameof(SelectedCategory)); 
     } 
    } 

Wenn Sie Ihre Kategorien beenden bevölkern, setzte SelectedCategory = Categories.First();

in XAML, SelectedIndex und SelectedItem Eigentum der ComboBox zu den neu geschaffenen Objekten in Ansichtsmodell Bindung, Binde-Modus = Zwei-Wege-Modus.

+0

Ich kann den Namespace für RaisePropertyChanged nicht finden. Meine App verweist auf eine SQLite-Datenbank. – rur2641

+1

Ich verwende die gleiche Idee, aber mit INotifyPropertyChanged. Ich bin mir nicht sicher über die XAML: SelectedItem = "{Binding ViewModel.SelectedCategory, Mode = TwoWay}" ?? – rur2641

+1

SelectedItem = "{Binding SelectedCategory, Mode = TwoWay}" nur. RaisePropertyChanged ist das gleiche Ideal mit Ihrer Implementierung von INotifyPropertyChanged – thang2410199

0

Wie wäre es, die SelectedIndex auf 0 im Loaded Ereignis im Code hinter der ComboBox zu setzen? Da Sie das ausgewählte Element immer auf das erste Element festlegen möchten, ist dies einfach genug.

Oder

Wenn Sie wollen, dass es selbst in XAML implementiert werden, verwenden Sie einen EventTrigger für Loaded Ereignis innerhalb der ComboBox und verwenden Sie einen Setter die Eigenschaft SelectedIndex-0 einzustellen.