2014-09-25 5 views
1

Я работаю над silverlight, и я новичок в нем, у меня есть коробка combox, внутри которой есть флажок и текстовое поле. Я хочу получить значение этих элементов управления при нажатии кнопки. Как это сделать в SilverLight? Это мой ComboBoxSilverLight Получить контроль Значение внутри Combo Box

<ComboBox x:Name="Type" VerticalAlignment="Top" Margin="2,8,-2,0" Grid.ColumnSpan="3" Height="28" Padding="3"> 
         <ComboBoxItem> 
          <Grid HorizontalAlignment="Stretch"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="20"/> 
            <ColumnDefinition Width="*" MinWidth="105" /> 
            <ColumnDefinition Width="60" /> 
           </Grid.ColumnDefinitions> 
           <CheckBox IsChecked="true" VerticalAlignment="Center" Grid.Column="0"/> 
           <TextBlock Text="All" VerticalAlignment="Center" Grid.Column="1" Style="{x:Null}" FontSize="11"/>        
          </Grid> 
         </ComboBoxItem> 

         <ComboBoxItem> 
          <Grid HorizontalAlignment="Stretch"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="20"/> 
            <ColumnDefinition Width="*" MinWidth="105" /> 
            <ColumnDefinition Width="60" /> 
           </Grid.ColumnDefinitions> 
           <CheckBox IsChecked="true" VerticalAlignment="Center" Grid.Column="0"/> 
           <TextBlock Text="General" VerticalAlignment="Center" Grid.Column="1" Style="{x:Null}" FontSize="11"/>        
           <TextBox Text="25" VerticalAlignment="Center" Grid.Column="2" FontSize="11" Padding="2" HorizontalContentAlignment="Right"/>         
          </Grid> 
         </ComboBoxItem>      
         </ComboBox> 

Пользователь имеет возможность выбрать несколько значений Я использую MVVM шаблон

+0

также попробовать ссылки на ComboBoxItem IsSelected к CheckBox IsChecked

ответ

1

Поскольку все ваши ComboBox Items неизменны, вы можете дать названия этим пунктам и ссылаться на них непосредственно.

<ComboBoxItem x:Name="ComboItemAll"> 
    ... 
</ComboBoxItem> 
<ComboBoxItem x:Name="ComboItemGeneral"> 
    ... 
</ComboBoxItem> 

и в Button Click события:

if (ComboItemAll.IsSelected) 
{ 
    ... 
} 
else if (ComboItemGeneral.IsSelected) 
{ 
    ... 
} 

в качестве альтернативы, вы можете также получить эту информацию из ComboBox "Тип":

var selectedItem = Type.SelectedItem; 
if (selectedItem.Name.StartsWith("ComboItemAll")) 
{ 
    ... 
} 
else if (selectedItem.Name.StartsWith("ComboItemGeneral")) 
{ 
    ... 
} 

для MVVM (Edit):

Xaml (View):

<ComboBox SelectedItem="{Binding SelectedCustomItem, Mode=TwoWay}" ItemsSource="{CustomItems}" ItemTemplate={StaticResource CustomItemsTemplate} /> 

Xaml (ресурса):

<DataTemplate x:Key="CustomItemsTemplate"> 
    <StackPanel 
     <CheckBox IsChecked="{Binding IsSelected}" VerticalAlignment="Center"/> 
     <TextBlock Text="{Binding CustomPropertyFromCustomClass}"/> 
    </StackPanel> 
</DataTemplate> 

VM:

public class ViewModel 
{ 
    public ViewModel() 
    { 
     CustomItems = new ObservableCollection<CustomClass>(); 
     CustomItems.Add(new CustomClass() { "All" }); 
     CustomItems.Add(new CustomClass() { "General" }); 
    } 

    private ObservableCollection<CustomClass> customItems = null; 
    public ObservableCollection<CustomClass> CustomItems 
    { 
     get { return customItems; } 
     set 
     { 
     if (object.Equals(value, customItems) == false) 
     { 
      customItems = value; 
      OnPropertyChanged(() => CustomItems); 
     } 
     } 
    } 

    private CustomClass selectedCustomItem = null; 
    public CustomClass SelectedCustomItem 
    { 
     get { return selectedCustomItem; } 
     set 
     { 
     if (object.Equals(value, selectedCustomItem) == false) 
     { 
      selectedCustomItem= value; 
      OnPropertyChanged(() => SelectedCustomItem); 
     } 
     } 
    } 
} 

Вы никогда не должны ссылаться на свой выпадающий непосредственно из ViewModel. Все в вашей ViewModel должно быть связано с манипуляциями с данными и ничего не знать о View (aka ComboBox).

Все остальное должно быть сделано в представлении. Если вам нужно получить доступ к ComboBox, вам нужно спросить себя, почему, и могу ли я сделать эту логику в XAML через шаблоны и привязки?

+0

Спасибо за ответы, Я использую шаблон MVVM, и код нажатия кнопки находится в моей модели ViewModel. Как я могу получить доступ к combobox в ViewModel? –

Смежные вопросы