我是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