如果选择了某些组合框项,则使文本块可见-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:使用按钮添加新行以添加组合框项时出错
WPF 根据 ObservableCollection<T> 项选择组合框项