WPF,UserControl,构建基于动态属性的数据,VB,.NET,WPF控件

时间:2011-05-27 23:41:36

标签: .net wpf vb.net user-controls

我是WPF newbe,带有UserControl,在用户控件中,我想绑定到一个项类型属性存储在我的dataContext中(称为“AssignType”)...“AssignType”确定一个控件来保存“价值“财产。

AssignType可以是文本框,Richtextbox,ComboBox,DatePicker,RadioButton等等

Value字段需要使用双向绑定绑定到“AssignType”控件 - 此外,还需要绑定项目数据(例如,组合源)

我设法实现这一目标的唯一方法是创建自定义控件,检查DataContext并手动构建“Assigned Controls”,然后对Controls Changed Event应用任何更改,

我的问题是,这只是看起来'非常WPF'...... 做这样一项任务的正确方法是什么?

(样本负载电流法)

Select Case AssignedType
    Case Items.FieldTypes.IsText, 
        Tb = New TextBox
        Try
            If Not IsNothing(Source.ValueItem) Then _
                Tb.Text = Source.ValueItem
        Catch
        End Try
        Tb.SetBinding(TextBox.TextProperty, BindingSource)
        AddChild(Tb)

    Case Items.FieldTypes.IsDropDownValue
        cbo = New ComboBox
        cbo.HorizontalAlignment = Windows.HorizontalAlignment.Stretch
        PopulateComboValues(cbo, Source)
        AddChild(cbo)

    Case Items.FieldTypes.IsDateValue
        Dt = New DatePicker
        Dt.HorizontalAlignment = Windows.HorizontalAlignment.Stretch
        Try
            If IsDate(Source.ValueItem) Then Dt.SelectedDate = Convert.ToDateTime(Source.ValueItem)
        Catch
        End Try
        Dt.Margin = New Thickness(5, 0, 5, 0)
        AddChild(Dt)

    Case Items.FieldTypes.IsLargeText
        Rtf = New RichTextBox
        Rtf.HorizontalAlignment = Windows.HorizontalAlignment.Stretch
        Try
            If Not IsNothing(Source.ValueItem) AndAlso Source.ValueItem.Trim <> "" Then
                Dim ms As MemoryStream = New MemoryStream(ASCIIEncoding.Default.GetBytes(Source.ValueItem))
                Rtf.Selection.Load(ms, DataFormats.Xaml)
            End If
            Rtf.SpellCheck.IsEnabled = True
        Catch
        End Try
        Rtf.Height = 100
        AddChild(Rtf)

    Case Items.FieldTypes.IsImageList

1 个答案:

答案 0 :(得分:1)

确实它不是WPF-ish。这就是我们使用DataTemplates的目的。