WPF, UserControl, Построение динамических атрибутных данных, VB, .NET, WPF Controls - PullRequest
0 голосов
/ 28 мая 2011

Я новичок WPF, с UserControl, внутри пользовательского элемента управления, я хочу привязать к типу элемента Свойство, хранящееся в моем dataContext (называемом "AssignType") ... "AssignType" определяет элемент управления для хранения " Значение "свойство.

AssignType может быть Textbox, Richtextbox, ComboBox, DatePicker, RadioButton ... и т.д.

Поле значения должно быть привязано к элементу управления «AssignType» с использованием двухсторонней привязки - более того, данные элементов (например, комбинированный источник) также должны быть связаны

единственный способ, которым мне удалось этого добиться, - создать пользовательский элемент управления, изучить DataContext и создать «Назначенные элементы управления» вручную, а затем применить все изменения к событию Controls Changed,

Моя проблема в том, что это не похоже на "очень 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 Ответ

1 голос
/ 28 мая 2011

Действительно, это не очень WPF-иш.это то, для чего мы используем DataTemplates .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...