show/hide 根据选择的组合框控制文本框 WPF

show/hide control textbox based on combobox selected WPF

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

在我看来我有两个 ControlBox "NoRSAC" 和 "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 "cmbFonction"

<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" />

当我 select ComboBox "cmbFonction" 中的一个特定值时,我想查看 ControlBox "NoRSAC" 和 "LieuRSAC",当它是另一个 select 时隐藏编辑值

感谢您的帮助

在 属性 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" />