我正在使用MVVM conceot来开发我的项目。 我有使用组合框和文本框的视图,我希望只有在选择了组合框的特定项目时启用文本框。共同框的项目源被绑定到字符串列表,而我想要做的就是当第4个元素列表是"其他"选择启用文本框,否则禁用。 在视图中,我有
<ComboBox x:Name="department_Combobox" HorizontalAlignment="Left"
ItemsSource=" {Binding Path= DepartmentList}" SelectedItem="{Binding Department}"
VerticalAlignment="Top" Width="200" Height="25" SelectedIndex="0" Grid.Row="17"
Grid.RowSpan="2" Grid.Column="1" >
</ComboBox>
<TextBox x:Name="department_Name_TextBox" Text="{Binding
Path=Department,Mode=TwoWay}" Grid.Row="17" TextWrapping="Wrap" Grid.Column="2"
Width="201" Height="24" VerticalAlignment="Center" HorizontalAlignment="Right" />
如何仅在选择第4个Departmentlist列表时启用文本框,在选择其他元素时禁用? 感谢。
答案 0 :(得分:0)
正如King King所说,你应该使用Trigger。我添加了一个属性&#34; SelectedDepartment&#34;绑定你的组合框SelectedItem也是。否则,当您键入TextBox并更新Department时,它将不再符合Trigger的条件并将禁用文本框。在其他地方更改逻辑以返回SelectedDepartment值,除非它是&#34;其他&#34;然后使用部门值。
我添加了IsEnabled默认为False,并且绑定到SelectedDepartment,当值为&#34;其他&#34;时将启用TextBox。
<TextBox x:Name="department_Name_TextBox"
Text="{Binding Path=Department, Mode=TwoWay}"
Grid.Row="17"
TextWrapping="Wrap"
Grid.Column="2"
Width="201"
Height="24"
VerticalAlignment="Center"
HorizontalAlignment="Right">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="IsEnabled"
Value="False" />
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectedDepartment}"
Value="Other">
<Setter Property="IsEnabled"
Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
编辑:要在ComboBox关闭&#34;其他&#34;时清除TextBox值,我会添加OnSelectedDepartmentChanged方法来处理此问题。
private string _SelectedDepartment;
public string SelectedDepartment
{
get { return _SelectedDepartment; }
set
{
if (value == _SelectedDepartment)
return;
_SelectedDepartment = value;
RaisePropertyChanged("SelectedDepartment");
OnSelectedDepartmentChanged();
}
}
private void OnSelectedDepartmentChanged()
{
if (!SelectedDepartment.Equals("Other"))
Department = string.Empty;
}