Wpf 选择组合框项目时启用文本框
我想在选择comboboxitem时启用文本框。注意:combobox项未定义,但我在combox中使用了item source来获取combo box项的列表。我想在选择combox项时更改文本框的属性 (注释粘贴到原始问题)Wpf 选择组合框项目时启用文本框,wpf,wpf-controls,Wpf,Wpf Controls,我想在选择comboboxitem时启用文本框。注意:combobox项未定义,但我在combox中使用了item source来获取combo box项的列表。我想在选择combox项时更改文本框的属性 (注释粘贴到原始问题) 我只希望它在XAML中,而不是在代码隐藏中。我不想对每个索引值重复这一点–尽管更好的方法是使用MVVM模式并绑定到ViewModel中的属性(正如Dabblenl所建议的),但我认为您可以通过以下方式实现您想要的: <StackPanel>
我只希望它在XAML中,而不是在代码隐藏中。我不想对每个索引值重复这一点–尽管更好的方法是使用MVVM模式并绑定到ViewModel中的属性(正如Dabblenl所建议的),但我认为您可以通过以下方式实现您想要的:
<StackPanel>
<ComboBox ItemsSource="{Binding Items}" Name="cmbInstrumentType"/>
<TextBox>
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=cmbInstrumentType, Path=SelectedItem}" Value="{x:Null}">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</StackPanel>
如果组合框中未选择任何项目,这将禁用文本框
编辑:扩展代码段我认为做这类事情的最好方法是使用转换器,这样您就不必用处理这些内容的样式污染视图,并且逻辑不在视图中 像这样的
IsEnabled="{Binding ElementName=cboVersion, Path=SelectedItem, Converter={StaticResource ObjectToBoolConverter}}"
当然,您需要ObjectToBool转换器,类似这样的东西(非常简单,没有类型检查等,应该改进)
}
记住在resourcedictionary中注册转换器
e、 g
这是可以做到的;-)告诉我们你有什么thusfar,我们会让你走上正轨。使绑定尽可能依赖于要绑定到的类(所谓的Viewmodel)的属性,避免将文本框绑定到组合框。当组合框的属性发生更改时,让ViewModel的状态发生更改,并将文本框绑定到该属性,我只希望它在XAML中,而不是在代码隐藏中。我不想对每个索引值重复这一点。我现在已经在文本框i pass的样式触发器中编写了这段代码,没有时间了。但希望其他人会接手。现在还不清楚你到底想在这里做什么。是否希望在选择任何组合框项目时启用文本框?或者当选择某个特定项目时?是的,我希望在选择组合框时启用textbox。是的,我同意,但问题是应用程序何时运行。文本框将首先被禁用。只有当我们在组合框中进行选择时,它才会被启用,否则它将继续禁用解决方案工作?我还建议简单地使用一个here,并相应地设置属性和SourceName属性。您不需要使用绑定或DataTrigger来触发纯UI元素。触发器的哪个属性适合组合框选择已更改。@user1379584:首先禁用它。你试过我的例子吗?我不明白你的例子。它在哪里?我看不见
IsEnabled="{Binding ElementName=cboVersion, Path=SelectedItem, Converter={StaticResource ObjectToBoolConverter}}"
public class ObjectToBoolConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
return value != null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
<Converters:ObjectToBoolConverter x:Key="ObjectToBoolConverter"/>