显示/隐藏基于组合框选择的WPF的控件文本框

时间:2015-05-28 10:16:59

标签: c# wpf mvvm combobox textbox

我在C#/ FrameWork 4.0中有一个WPF / MVVM项目

在我看来,我有两个ControlBox" NoRSAC"和#34; LieuRSAC"

<View:StateControlTextBox
                            x:Name="NoRSAC"
                            ReadOnly="{Binding IsReadOnly}"
                            ViewModelDataType="UtilisateurSaisieViewModel" 
                            TableDataType="TUtilisateurDataTable"
                            Tag="{DynamicResource TELEPHONE}" 
                            Text="{Binding UserVM.No_RSAC, Mode=TwoWay}" Margin="0" Canvas.Top="140" Width="185" VerticalAlignment="Stretch" />
                        <View:StateControlTextBox
                            x:Name="LieuRSAC"
                            ReadOnly="{Binding IsReadOnly}"
                            ViewModelDataType="UtilisateurSaisieViewModel" 
                            TableDataType="TUtilisateurDataTable"
                            Tag="{DynamicResource TELEPHONE}" 
                            Text="{Binding UserVM.Lieu_RSAC, Mode=TwoWay}" Margin="0" Canvas.Top="140" Width="185" VerticalAlignment="Stretch"/>
                    </Canvas>

和ControlComboBox&#34; cmbFonction&#34;

<View:StateControlComboBox
                            x:Name="cmbFonction"
                            ReadOnlyControlState="Disabled" 
                            IsReadOnly="{Binding IsReadOnly}"
                            ViewModelDataType="UtilisateurSaisieViewModel" 
                            TableDataType="TUtilisateurDataTable"
                            ItemsSource="{Binding ListeFonctions}" 
                            SelectedValue="{Binding UserVM.Fonction, Mode=TwoWay}" Width="303" Margin="0" HorizontalAlignment="Left" Canvas.Left="97" Canvas.Top="108" />

我想查看ControlBox&#34; NoRSAC&#34;和#34; LieuRSAC&#34;当我在ComboBox&#34; cmbFonction&#34;中选择一个特定的valeure时当它是另一个选定的值时隐藏

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

在属性Fonction的set方法中,您可以检查值并更新应在视图模型中引入的属性System.Windows.Visibility的另一个属性。在以下示例中,我将此属性称为TextBoxVisibility

public class UserVM : INotifyPropertyChanged
{
    private Visibility _textBoxVisibility;

    public Visibility TextBoxVisibility
    {
        get { return _textBoxVisibility; }
        set 
        {
            _textBoxVisibility = value;
            OnPropertyChanged();
        }
    }

    public string Fonction
    {
        get { return _fonction; }
        set
        {
            _fonction = value;
            OnPropertyChanged();
            if (value == "Value A")
                TextBoxVisibility = Visibility.Hidden;
            else
                TextBoxVisibility = Visibility.Visible;
        }
    }

    // Other members omitted for sake of simplicity.
}

请注意,您需要实现INotifyPropertyChanged(直接或间接),以便将属性值的更改转发到绑定,然后绑定可以更新视图中控件的依赖项属性。

因此,您不能忘记在视图中的所有文本框中添加其他绑定。这是一个例子,重要的部分是Visibility上的绑定:

<View:StateControlTextBox
                        x:Name="NoRSAC"
                        ReadOnly="{Binding IsReadOnly}"
                        ViewModelDataType="UtilisateurSaisieViewModel" 
                        TableDataType="TUtilisateurDataTable"
                        Tag="{DynamicResource TELEPHONE}"
                        Visibility="{Binding UserVM.TextBoxVisibility}" 
                        Text="{Binding UserVM.No_RSAC, Mode=TwoWay}" Margin="0" Canvas.Top="140" Width="185" VerticalAlignment="Stretch" />