如果选择了某些组合框项,则使文本块可见-MVVM

Posted

技术标签:

【中文标题】如果选择了某些组合框项,则使文本块可见-MVVM【英文标题】:Make textblock visible if some combobox item was selected-MVVM 【发布时间】:2018-10-02 01:40:55 【问题描述】:

我有一个包含一些项目和一个文本块的组合框,我希望如果用户从组合框中选择 let's sat Item3 然后文本块将可见,否则不可见。

我想用 mvvm 来做(我是这个架构的新手),我添加了一些 MessageBox 来检查它是否进入if 条件,它显示了 MessageBox 但文本块总是不可见,这是我的代码:

XAML:

<ComboBox x:Name="product_combobox" IsEditable="False" IsReadOnly="True"  Height="24" Margin="155,106,155,0"  HorizontalAlignment="Center" VerticalAlignment="Top"  Width="210" ItemsSource="Binding MyItems" SelectedIndex="Binding YourIndexProperty" SelectedItem="Binding SelectedItem" />

<TextBlock x:Name="version_textBlock" Visibility="Binding VersionVisibility"  Height="20" Margin="155,144,155,0" TextWrapping="Wrap" HorizontalAlignment="Center" Text="Select Sasa version:" VerticalAlignment="Top" FontFamily="Moire ExtraBold" RenderTransformOrigin="0.582,0.605" Width="210" FontWeight="Bold" />

ViewModel.cs:

public ObservableCollection<string> MyItems  get; set; 
        public string _mySelectedItem;
        public Visibility _isEnable;

        public Page1VM()
        
            this.DisplayMessageCommand = new RelayCommand(this.DisplayMessage);
            MyItems = new ObservableCollection<string>()
            
                 "--Product--",
                "Item1",
                "Item2",
                "Item3"
            ;
            _mySelectedItem = "--Product--";
            _isEnable = Visibility.Hidden;//<--------this for hiding the textblock when page load
        

public Visibility VersionVisibility
        
            get  return _isEnable; 
            set  _isEnable = value; 
        



        public string SelectedItem
        
            get  return _mySelectedItem; 
            set
            
                _mySelectedItem = value;

                if (value.Equals("Item3"))
                
                    VersionVisibility = Visibility.Visible;

                    MessageBox.Show("test");
                
            
        

【问题讨论】:

IMO 只是做纯粹的视图,而不是搞砸 ViewModel。这应该可以帮助你***.com/a/2562065/3225 是否可以按照我的方式进行?我的意思是你给的链接没有纯粹的观点 你用过IValueConverter吗? 还没有,我是 MVVM 的新手 视图模型的全部目的是充当数据和视图之间的适配器。 【参考方案1】:

您需要告诉视图视图模型中的属性值已更改,并且它应该读取该新值。 在您的视图模型中实现 inotifypropertychanged。 在此处提高属性更改:

Public Visibility VersionVisibility
        
            get  return _isEnable; 
            set  _isEnable = value; RaisePropertyChanged();
        

这是一个基础视图模型类,您可以从中继承视图模型。

public class BaseViewModel : INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    public void RaisePropertyChanged([CallerMemberName] String propertyName = "")
    
        if (PropertyChanged != null)
        
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        
    

【讨论】:

谢谢!蓬松。

以上是关于如果选择了某些组合框项,则使文本块可见-MVVM的主要内容,如果未能解决你的问题,请参考以下文章

带有按钮、组合框和文本框的 C# WinForms (.NET Framework) DataGridView:使用按钮添加新行以添加组合框项时出错

ExtJS 动态更改组合框项的值

WPF 根据 ObservableCollection<T> 项选择组合框项

如何为 extjs 应用程序选择组合框项 Internet Explorer?

WPF 基于组合框选择使用 MVVM 改变窗口布局

C#组合框,将文本值分配给焦点丢失事件的变量?