我将一个ComboBox绑定到定义为此的对象集合。根据另一个控件的值仅允许许多控件中的一个显示
public class TierOption
{
public string Option { get; set; }
public Type DataType { get; set; }
}
public class TierOptions : ObservableCollection<Tier1Option>
{
}
我有3个与此相关的组合框其他控件,这是一个文本框,组合框,或WPFToolKit:的DatePicker。
我只需要显示与第一个ComboBox中所选对象的数据类型(Type)相对应的相关控件,以及其他控件。
伪码示例: (也许太靠近屠杀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的新手,我非常努力地坚持最好的设计实践。
谢谢!
+1我觉得这个想法比我最初使用触发器的想法要好。如果您的控件数量增加,触发器会使其更加困难。拥有不同的数据模式是迈向未来的方式,因为如果需要,以后可以轻松添加更多控件。 – dowhilefor 2012-04-03 13:54:27
这看起来像我会喜欢它会工作,如果第一个组合框中的每个对象都是特定的类型,但每个对象都具有相同的类型(TierOption),它具有定义DataType的属性。我误解了什么吗? – elo 2012-04-03 15:20:15
@elo对不起,您对了!我读得太快了,所以你必须为列表中的每种类型的选项创建一个类(继承自TierOption)。 – Jonas 2012-04-03 15:39:25