Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > получение данных из комбобоксов внутри ListView


Автор: nikich92 25.4.2013, 09:21
всем привет. Подскажите пожалуйста, как получить SelectedValue каждого из комбобоксов, которые находятся внутри ListView?
Код

 <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <ListView x:Name="lView" ItemsSource="{Binding ItemsLW}" Grid.Row="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="3">
            <ListView.View>
                <GridView x:Name="grView">
                    <GridViewColumn Header="Столбец1" Width="Auto" x:Name="col1">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate >
                                <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{Binding TextForTb}" Margin="5,0,5,0"></TextBlock>
                                <ComboBox Width="Auto" MinWidth="80" ItemsSource="{Binding Cols}" SelectedIndex="0" >
                                </ComboBox>
                                </StackPanel>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                    <GridViewColumn Header="Столбец2" Width="Auto" x:Name="col2">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox Name="cbVars" Width="Auto" MinWidth="80" ItemsSource="{Binding Variants}" SelectedItem="{Binding SelectedItem}"></ComboBox>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
        <StackPanel Grid.Row="1" HorizontalAlignment="Stretch" FlowDirection="RightToLeft" Orientation="Horizontal">
            <Button  Width="50" VerticalAlignment="Center" Content="Отмена" Margin="5,0,0,0" IsCancel="True"></Button>
            <Button x:Name="btnOK"  Width="50" VerticalAlignment="Center" Content="ОК" Margin="5" Click="btnOK_Click"></Button>
        </StackPanel>
    </Grid>
</Window>

Окно выглядит вот так: 
http://s2.ipicture.ru/

Автор: dzaraev 29.6.2013, 19:37
SelectedValue - это dependency property, а значит можешь просто забиндить его на соответствующее свойство объекта, который устанавливается в DataContext'e элемента листа (т.е. на свойство того объекта, на который у тебя уже забинден TextBlock Text="{Binding TextForTb}").
Если ты хочешь именно "получить" и только "получать" значение SelectedValue, то просто выставь его биндингу свойство Mode=OneWayToSource. В этом случае биндинг будет только писать в твой объект, но не считывать.

Код XAML будет выглядеть примерно так:
Код

<ComboBox SelectedValue="{Binding SelectedValueForCB, Mode=OneWayToSource}" Width="Auto" MinWidth="80" ItemsSource="{Binding Cols}" SelectedIndex="0" >

А в класс, к которому уже принадлежат свойства TextForTb, Cols и т.п. добавится свойство SelectedValueForCB.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)