【问题标题】:SilverLight Get control Value inside Combo BoxSilverLight 获取组合框内的控制值
【发布时间】:2014-09-26 22:57:20
【问题描述】:

我正在研究silverlight,我是新手,我有一个组合框,里面有一个复选框和文本框。我想在按钮单击时获取这些控件的值,如何在 SilverLight 中执行此操作? 这是我的组合框

 <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 模式

【问题讨论】:

  • 也尝试链接到 ComboBoxItem IsSelected 到 CheckBox IsChecked

标签: c# silverlight


【解决方案1】:

由于您的所有 ComboBox 项都不变,您可以为这些项指定名称并直接引用它们。

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

以及在按钮点击事件中:

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

或者,您也可以从您的 ComboBox“类型”中获取此信息:

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

对于 MVVM(编辑):

Xaml(视图):

<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>

虚拟机:

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(又名 ComboBox)一无所知。

其他一切都应该在视图中完成。如果您需要访问 ComboBox,您需要问自己为什么,我可以通过模板和绑定在 XAML 中执行该逻辑吗?

【讨论】:

  • 感谢您的回答,我正在使用 MVVM 模式,并且按钮点击代码在我的 ViewModel 中,我如何访问 ViewModel 中的组合框?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 2012-10-19
  • 2013-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多