gpt4 book ai didi

wpf - 根据另一个控件的值,仅使多个控件中的一个可见

转载 作者:行者123 更新时间:2023-12-04 18:24:25 24 4
gpt4 key购买 nike

我有一个 ComboBox 绑定(bind)到定义为 this 的对象集合。

public class TierOption
{
public string Option { get; set; }
public Type DataType { get; set; }
}
public class TierOptions : ObservableCollection<Tier1Option>
{

}

我有 3 个与此 ComboBox 相关的其他控件,它们是 TextBox、ComboBox 或 WPFToolKit:DatePicker。

我只需要显示与在第一个 ComboBox 中选择的对象的数据类型(类型)相对应的相关控件,而其他任何一个都不显示。

伪代码示例:
(可能太接近被屠杀的 C#,但希望它传达了这个想法)
switch (ComboBox.SelectedItem.DataType)
{
case String:
TextBox.Visibility = Visibility.Visible;
ComboBox.Visibility = Visibility.Hidden;
DatePicker.Visibility = Visibility. Hidden;
break;
case DateTime:
TextBox.Visibility = Visibility.Hidden;
ComboBox.Visibility = Visibility.Hidden;
DatePicker.Visibility = Visibility. Visible;
break;
<...so forth and so on...>
}

我的尝试导致了非常非 wpf 看起来令人费解的困惑,无论如何都不起作用。作为 wpf 的新手,我非常努力地忠于最佳设计实践。

谢谢!

最佳答案

您可以使用具有 DataType 属性的 DataTemplate

<...Resources>
<DataTemplate DataType="{x:Type sys:String}">
<TextBox Text="{Binding}"/>
</DataTemplate>
<DataTemplate DataType="{x:Type DateTime}">
<DatePicker .../>
</DataTemplate>
...
</...Resources>

<ContentControl Content="{Binding SelectedItem, ElementName=myComboBox}"/>

<ComboBox ItemsSource="{Binding ...}"/>

上面的代码只是想法,您可能需要进行调整。例如,您将无法修改字符串项目本身(您可能必须封装列表中的每个项目)

如果您的列表包含相同类型的所有项目,您可以在 contentControl 上使用 ContentTemplateSelector。
 ContentControl Content="{Binding SelectedItem, ElementName=YourCombBox}" ContentTemplateSelector="{StaticResource YourTemplateSelector}"

MSDN DOC about ContentControl.ContentTemplateSelector Property

关于wpf - 根据另一个控件的值,仅使多个控件中的一个可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9993789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com