Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果选择了某个组合框项,则使textblock可见MVVM_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# 如果选择了某个组合框项,则使textblock可见MVVM

C# 如果选择了某个组合框项,则使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

我有一个包含一些项目和文本块的组合框,我希望如果用户从组合框中选择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" />
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。