首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight 3 DataForm,如何显示/隐藏字段

Silverlight 3 DataForm,如何显示/隐藏字段
EN

Stack Overflow用户
提问于 2009-08-03 14:36:40
回答 2查看 3.1K关注 0票数 0

我有一个DataForm,我已经将某些DataFields的可见性设置为折叠,当用户从ComboBox中选择一个选项时,某些DataFields应该再次可见。

基本上(在粗略的伪代码中)。

代码语言:javascript
复制
OnComboBoxChange = 
    if this.index = 1 then
        DataForm.Fields[1].Visibility = Visible
    else
        DataForm.Fields[2].Visibility = Visible

适用于MVVM模式的答案加分。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-03 16:48:21

下面是一个使用MVVM的示例,它避免了代码隐藏(有争议的MVVM no-no):

代码语言:javascript
复制
<UserControl>
  <StackPanel>
    <ComboBox x:Name="comboBox" SelectionChanged="comboBox_SelectionChanged"/>
    <StackPanel Orientation="Horizontal" Visibility="{Binding IsFirstFormShown}">
      <TextBlock Text="First: "/>
      <TextBox/>
    </StackPanel>
    <StackPanel Orientation="Horizontal" Visibility="{Binding IsSecondFormShown}">
      <TextBlock Text="Second: "/>
      <TextBox/>
    </StackPanel>
  </StackPanel>
</UserControl>

这是你的ViewModel,

代码语言:javascript
复制
public class MyFormViewModel : INotifyPropertyChanged
{
     private System.Windows.Visibility _isFirstShown;
     public System.Windows.Visibility IsFirstFormShown
     {
          get { return _isFirstShown; }
          set
          {
               _isFirstShown = value;
               if (PropertyChanged != null ) 
               { 
                    PropertyChanged(this, new PropertyChangedEventArgs(value)); 
               }
          }
     }

     //TODO: implement the other property (writing code in this edit window makes me tired)
     //hopefully you get the picture here...
}

非常简单。我可能会尝试将我的属性命名为“模型”而不是“视图”,但这种约定并不完全不合适。

票数 5
EN

Stack Overflow用户

发布于 2009-08-03 15:02:02

在MVVM模式设置的上下文中,据我所知,控件的可见性属于视图。无论如何,您的伪代码或多或少地完成了这项工作。以下是一些更具体的片段:

代码语言:javascript
复制
<UserControl>
  <StackPanel>
    <ComboBox x:Name="comboBox" SelectionChanged="comboBox_SelectionChanged"/>
    <StackPanel x:Name="firstPanel" Orientation="Horizontal">
      <TextBlock Text="First: "/>
      <TextBox/>
    </StackPanel>
    <StackPanel x:Name="secondPanel" Orientation="Horizontal">
      <TextBlock Text="Second: "/>
      <TextBox/>
    </StackPanel>
  </StackPanel>
</UserControl>

代码语言:javascript
复制
public partial class MainPage : UserControl {

  public MainPage() {
    InitializeComponent();
    this.comboBox.ItemsSource = new String[] { "First", "Second" };
    this.comboBox.SelectedIndex = 0;
  }

  void comboBox_SelectionChanged(Object sender, SelectionChangedEventArgs e) {
    ShowPanel((String) this.comboBox.SelectedItem);
  }

  void ShowPanel(String name) {
    if (name == "First") {
      this.firstPanel.Visibility = Visibility.Visible;
      this.secondPanel.Visibility = Visibility.Collapsed;
    }
    else {
      this.firstPanel.Visibility = Visibility.Collapsed;
      this.secondPanel.Visibility = Visibility.Visible;
    }
  }

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1222709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档