在ListView中获取ListView SelectedIndex值

问题描述:

它看起来比实际上要复杂一点,但我不得不在Listview里面使用ListView窗口。我带了一个DataTemplate作为资源,但问题是我无法访问资源部分中的任何内容,foreach,并去检查,但我认为我不知道从哪里开始,我必须得到selectedIndex的ListView(也许与消息框,说你点击xxx索引)。我用this例如,我该怎么办?在ListView中获取ListView SelectedIndex值

更新:

我的XAML窗口资源

<Window.Resources> 
    <DataTemplate x:Key="InsideListTemplate"> 
     <StackPanel Orientation="Vertical"> 
      <Grid MinWidth="300" MinHeight="20"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="50"/> 
        <ColumnDefinition Width="100*"/> 
       </Grid.ColumnDefinitions> 
       <Border Background="{x:Static SystemParameters.WindowGlassBrush}" Grid.ColumnSpan="5" Opacity=".8"/> 

       <!--0--> 
       <Grid Grid.Row="0" Grid.Column="0" MinWidth="50" MaxWidth="70" HorizontalAlignment="Left" Margin="3,0,0,0"> 
        <TextBlock Margin="5,0,0,0" Text="{Binding CodeNumber}" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/> 
       </Grid> 

       <!--1--> 
       <Grid Grid.Row="0" Grid.Column="3" MinWidth="300" MaxHeight="50" MinHeight="20" HorizontalAlignment="Left" Margin="5,0,0,0"> 
        <Grid> 
         <TextBox Text="{Binding Code}"/> 
        </Grid> 
       </Grid> 
      </Grid> 
     </StackPanel> 
    </DataTemplate> 

    <DataTemplate x:Key="CodeListTemplate"> 
     <StackPanel Orientation="Horizontal"> 
      <Grid Background="{x:Static SystemParameters.WindowGlassBrush}" MinHeight="296" MinWidth="400" MaxHeight="296" MaxWidth="400"> 
       <StackPanel Orientation="Vertical" VerticalAlignment="Center"> 
        <TextBlock Text="{Binding CodeGroupName}" Foreground="White" TextAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
       </StackPanel> 
      </Grid> 
      <ListView HorizontalAlignment="Stretch" Background="#FFBB9B45" HorizontalContentAlignment="Stretch" MinWidth="100" MinHeight="25" MaxHeight="300" ItemsSource="{Binding CodeList}" ItemTemplate="{StaticResource InsideListTemplate}"/> 
     </StackPanel> 
    </DataTemplate> 
</Window.Resources> 

主要列表视图

<ListView x:Name="KodListeleri" Visibility="Visible" Grid.Row="1" Background="CadetBlue" Margin="20,20,20,20" Foreground="#FFFBF7F7" BorderBrush="Transparent" ItemTemplate="{StaticResource CodeListTemplate}" VirtualizingStackPanel.IsVirtualizing="False"/> 

public sealed class CodeLibrary 
{ 
    public int CodeGroupNumber { get; set; } 
    public string CodeGroupName { get; set; } 
    public List<Codes> CodeList { get; set; } 
} 

public class Codes 
{ 
    public int CodeNumber { get; set; } 
    public string Code { get; set; } 
} 

最后添加一些价值

List<CodeLibrary> AllCodesList = new List<CodeLibrary>(); 

    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     AllCodesList.Add(new CodeLibrary() 
     { 
      CodeGroupNumber = 1, 
      CodeGroupName = "My Code Group 1", 
      CodeList = new List<Codes> 
      { 
       new Codes {CodeNumber = 1, Code = "Code 1"}, 
       new Codes {CodeNumber = 2, Code = "Code 2"}, 
       new Codes {CodeNumber = 3, Code = "Code 3"}, 
       new Codes {CodeNumber = 4, Code = "Code 4"}, 
       new Codes {CodeNumber = 5, Code = "Code 5"}, 
       new Codes {CodeNumber = 6, Code = "Code 6"}, 
       new Codes {CodeNumber = 7, Code = "Code 7"}, 
       new Codes {CodeNumber = 8, Code = "Code 8"}, 
       new Codes {CodeNumber = 9, Code = "Code 9"}, 
       new Codes {CodeNumber = 10, Code = "Code 10"}, 
       new Codes {CodeNumber = 11, Code = "Code 11"}, 
       new Codes {CodeNumber = 12, Code = "Code 12"}, 
       new Codes {CodeNumber = 13, Code = "Code 13"}, 
       new Codes {CodeNumber = 14, Code = "Code 14"}, 
       new Codes {CodeNumber = 15, Code = "Code 15"}, 
       new Codes {CodeNumber = 16, Code = "Code 16"}, 
       new Codes {CodeNumber = 17, Code = "Code 17"}, 
       new Codes {CodeNumber = 18, Code = "Code 18"}, 
       new Codes {CodeNumber = 19, Code = "Code 19"}, 
       new Codes {CodeNumber = 20, Code = "Code 20"}, 
      } 
     } 
     ); 

     KodListeleri.ItemsSource = AllCodesList; 
    } 

它必须看起来像这样:enter image description here

+1

我们展示你的代码。如果我们看不到您的代码,没有人可以猜出您的代码中出现了什么问题。 –

+0

我是添加链接,相同的代码。没有任何错误。 –

+0

提供我要求的信息。 –

做到这一点,最快捷的方式就是给ListView的一个SelectionChanged事件处理程序:

<ListView 
    SelectionChanged="CodeListView_SelectionChanged" 
    ItemsSource="{Binding CodeList}" 
    ItemTemplate="{StaticResource InsideListTemplate}" 
    ... 

下面是什么处理程序看起来像在窗口类:

private void CodeListView_SelectionChanged(object sender, 
    SelectionChangedEventArgs e) 
{ 
    var listView = sender as ListView; 

    var selectedCodes = listView.SelectedItem as Codes; 
    if (selectedCodes != null) 
    { 
     // Do stuff with selectedCodes 
    } 
} 

但你可以做到M VVM风格,而不是:

public sealed class CodeLibrary 
{ 
    public int CodeGroupNumber { get; set; } 
    public string CodeGroupName { get; set; } 
    public List<Codes> CodeList { get; set; } 

    private Codes _selectedCodes; 
    public Codes SelectedCodes { 
     get { return _selectedCodes; } 
     set { 
      if (value != _selectedCodes) { 
       _selectedCodes = value; 

       // Do other stuff here if you want 
       MessageBox.Info("You selected " + _selectedCodes.Code); 
      } 
     } 
    } 
} 

XAML:

<ListView 
    SelectedItem 
    ItemsSource="{Binding CodeList}" 
    ItemTemplate="{StaticResource InsideListTemplate}" 
    ... 
+1

谢谢先生!这工作完美。 –

+0

@YıldırayEyüpErdoğan优秀! –

+0

但是,什么是MVVM风格? –