C# 如果选择了某个组合框项,则使textblock可见MVVM
我有一个包含一些项目和文本块的组合框,我希望如果用户从组合框中选择let's satC# 如果选择了某个组合框项,则使textblock可见MVVM,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我有一个包含一些项目和文本块的组合框,我希望如果用户从组合框中选择let's satItem3,则文本块将可见,否则将不可见 我想用mvvm来做这件事(我是这个架构的新手),我添加了一些MessageBox来检查它是否进入if状态,它会显示MessageBox,但文本块总是不可见,下面是我的代码: XAML: <ComboBox x:Name="product_combobox" IsEditable="False" IsReadOnly="True" Height="24" Margi
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" />
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");
}
}
}
ViewModel.cs:
<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" />
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");
}
}
}
publicobservableCollection MyItems{get;set;}
公共字符串_mySelectedItem;
公众可见度;;
公共页面1vm()
{
this.DisplayMessageCommand=新的RelayCommand(this.DisplayMessage);
MyItems=新的ObservableCollection()
{
“--产品--”,
“项目1”,
“项目2”,
“项目3”
};
_mySelectedItem=“--产品--”;
_isEnable=Visibility.Hidden;//您需要告诉视图viewmodel中的属性值已更改,并且它应该读取该新值。
在viewmodel中实现inotifypropertychanged。
在此处提升属性更改:
Public Visibility VersionVisibility
{
get { return _isEnable; }
set { _isEnable = value; RaisePropertyChanged();}
}
这是一个可以从中继承viewmodel的基本viewmodel类
public class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
我只是做纯视图,而不是弄乱视图模型。如果可能的话,这应该会帮助你按我的方式做吗?我的意思是没有纯视图作为你提供的链接你是否使用过IValueConverter
?还没有,我对mvvm很陌生。视图模型的全部目的是充当数据和视图之间的适配器。谢谢!Flufy。