我正在使用MVVM概念来开发我的项目。我有组合框和文本框的视图,我希望仅在选择组合框的特殊项时才启用文本框。组合框的项源绑定到字符串列表,而我要做的就是选择列表的第四个元素“ Other”时启用文本框,否则禁用。以为,我有
<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" />
当仅选择Departmentlist的第4个列表时,如何使启用文本框;选择其他元素时,如何禁用文本框?谢谢。
正如King King所说,您应该为此使用触发器。我还要添加一个属性“ SelectedDepartment”来绑定您的组合框SelectedItem。否则,当您在文本框中键入内容并更新Department时,它将不再符合触发器的条件,并且将禁用文本框。在其他地方更改逻辑以返回SelectedDepartment值,除非该值是“ Other”,然后使用Department值。
我添加了默认为False的IsEnabled和绑定到SelectedDepartment的触发器,该触发器将在值为“ Other”时启用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>
编辑:若要清除组合框关闭“其他”时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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句