WPF: ComboBox binding внутри Template

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

WPF: ComboBox binding внутри Template

Сообщение natcap » 21.04.2013 (Вс) 11:52

Всем привет :)

Разбираюсь с WPF
2-й день не могу решить задачу:
Есть ListBox.
Есть 2 списковых объекта
1-й объект: список из (Имя, Фамилия, Город(ID,имя города))
2-й объект: список городов(ID,имя города)

К ListBox сделан Binding 1-го объекта. Для отображения полей использован Template состоящий из 2-х TextBox и ComboBox.

Вопрос как сделать так, чтобы Combobox имел список элементов = 2-й объект, а выбранный элемент передавался бы как значение в 1-й

То, как у меня сейчас (список не заполняется)

Код: Выделить всё
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="My First WPF Application" Height="350" Width="782" Name="win1"
        x:Class="MainWindow">
    <Window.Resources>
        <CollectionViewSource Source="{Binding Source={x:Static Application.Current}, Path=TownList}" x:Key="TownList" />
    </Window.Resources>

    <Grid>
        <ListBox Name="ListBox1" ItemsSource="{Binding}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Background="#FFA3A3A3" Margin="10" DataContext="{Binding}">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="100"></ColumnDefinition>
                            <ColumnDefinition Width="100"></ColumnDefinition>
                            <ColumnDefinition Width="100"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                     
                       
                        <TextBox x:Name="FstName"
                             Text="{Binding FName, Mode=TwoWay, UpdateSourceTrigger=LostFocus}"
                             Grid.Column="0"
                             />

                        <TextBox x:Name="LstName"
                             Text="{Binding LName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                             Grid.Column="1"
                             />
                        <ComboBox x:Name="cmbList"
                                  ItemsSource ="{Binding Source={StaticResource TownList}}"
                                  DisplayMemberPath="Name"
                                  SelectedValuePath="Name"
                                  SelectedValue="{Binding Town}"
                                  Grid.Column="2" ItemStringFormat=" {0} " />
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>


Код: Выделить всё
Class MainWindow

    Public PersonList As New List(Of Person)
    Public TownList As New List(Of Town)

    Public Sub New()

        ' Этот вызов является обязательным для конструктора.
        InitializeComponent()

        ' Добавьте все инициализирующие действия после вызова InitializeComponent().
        PersonList.Add(New Person("Чундра", "Чучундра"))
        PersonList.Add(New Person("Чундра2", "Чучундра2"))
        PersonList.Add(New Person("Чундра3", "Чучундра3"))

        TownList.Add(New Town(1, "Москва"))
        TownList.Add(New Town(2, "Питер"))
        TownList.Add(New Town(3, "Смоленск"))
        TownList.Add(New Town(4, "Новгород"))
        TownList.Add(New Town(5, "Кривой Рог"))
        TownList.Add(New Town(6, "Киев"))

        Me.DataContext = PersonList
    End Sub
End Class

Public Class Person
    Private _fName As String
    Sub New(ByVal _f As String, ByVal _l As String)
        _fName = _f
        _lName = _l
    End Sub
    Public Property FName() As String
        Get
            Return _fName
        End Get
        Set(ByVal value As String)
            _fName = value
        End Set
    End Property
    Private _lName As String
    Public Property LName() As String
        Get
            Return _lName
        End Get
        Set(ByVal value As String)
            _lName = value
        End Set
    End Property
    Private _town As Town
    Public Property Town() As Town
        Get
            Return _town
        End Get
        Set(ByVal value As Town)
            _town = value
        End Set
    End Property


End Class

Public Class Town
    Sub New(ByVal i As Integer, ByVal n As String)
        _id = i
        _name = n
    End Sub
    Private _id As Integer
    Public Property id() As Integer
        Get
            Return _id
        End Get
        Set(ByVal value As Integer)
            _id = value
        End Set
    End Property
    Private _name As String
    Public Property Name() As String
        Get
            Return _name
        End Get
        Set(ByVal value As String)
            _name = value
        End Set
    End Property

End Class


Заранее спасибо за советы :)
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)

Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27

    TopList