C# 在ListView SelectedIndex值中获取ListView

C# 在ListView SelectedIndex值中获取ListView,c#,wpf,listview,C#,Wpf,Listview,它看起来比实际情况要复杂一些,但我不得不在ListView窗口中使用ListView。我引入了一个DataTemplate作为资源,但问题是我无法访问资源部分中的任何内容,foreach和do go and check,但我认为我不知道从哪里开始,我必须获取ListView的selectedIndex(可能是messagebox,假设您单击了xxx索引)。我使用了示例,我该如何做 更新: 我的XAML窗口资源 <Window.Resources> <DataTe

它看起来比实际情况要复杂一些,但我不得不在ListView窗口中使用ListView。我引入了一个DataTemplate作为资源,但问题是我无法访问资源部分中的任何内容,foreach和do go and check,但我认为我不知道从哪里开始,我必须获取ListView的selectedIndex(可能是messagebox,假设您单击了xxx索引)。我使用了示例,我该如何做

更新:

我的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; }
}
公共密封类代码库
{
公共int代码组编号{get;set;}
公共字符串CodeGroupName{get;set;}
公共列表代码列表{get;set;}
}
公共类代码
{
公共整数代码{get;set;}
公共字符串代码{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;
    }
List AllCodesList=new List();
已加载私有无效窗口(对象发送器、路由目标)
{
添加(新代码库()
{
CodeGroupNumber=1,
CodeGroupName=“我的代码组1”,
代码列表=新列表
{
新代码{CodeNumber=1,Code=“Code 1”},
新代码{CodeNumber=2,Code=“Code 2”},
新代码{CodeNumber=3,Code=“Code 3”},
新代码{CodeNumber=4,Code=“Code 4”},
新代码{Code number=5,Code=“Code 5”},
新代码{CodeNumber=6,Code=“Code 6”},
新代码{CodeNumber=7,Code=“Code 7”},
新代码{CodeNumber=8,Code=“Code 8”},
新代码{Code number=9,Code=“Code 9”},
新代码{CodeNumber=10,Code=“Code 10”},
新代码{Code number=11,Code=“Code 11”},
新代码{Code number=12,Code=“Code 12”},
新代码{Code number=13,Code=“Code 13”},
新代码{CodeNumber=14,Code=“Code 14”},
新代码{CodeNumber=15,Code=“Code 15”},
新代码{Code number=16,Code=“Code 16”},
新代码{CodeNumber=17,Code=“Code 17”},
新代码{Code number=18,Code=“Code 18”},
新代码{Code number=19,Code=“Code 19”},
新代码{CodeNumber=20,Code=“Code 20”},
}
}
);
KodListeleri.ItemsSource=AllCodesList;
}

它必须是这样的:

最快的方法是为ListView提供SelectionChanged事件处理程序:

<ListView 
    SelectionChanged="CodeListView_SelectionChanged"
    ItemsSource="{Binding CodeList}" 
    ItemTemplate="{StaticResource InsideListTemplate}"
    ...
但你可以用MVVM的方式来做:

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);
            }
        }
    }
}
公共密封类代码库
{
公共int代码组编号{get;set;}
公共字符串CodeGroupName{get;set;}
公共列表代码列表{get;set;}
专用代码_选择的代码;
公共代码已选择代码{
获取{return\u selectedCodes;}
设置{
如果(值)=\u选择的代码){
_selectedCodes=值;
//如果你想在这里做其他事情
MessageBox.Info(“您选择了”+_selectedCodes.Code);
}
}
}
}
XAML:


显示您的代码。如果我们看不到你的代码,没人可能猜到你的代码出了什么问题。我在添加链接,相同的代码。没有问题。提供我要求的信息。更新后的帖子。谢谢。因此,当用户单击内部列表视图中的
Codes
项目时,您会显示特定
CodeLibrary
CodeList
,您想知道单击了哪个项目吗?@YıldırayEyüpErdoğan精彩!但是,MVVM的风格是什么?@YıldırayEyüpErdoğan只是另一种方式。如果您的整个项目都像这样使用MVVM,那么您希望这部分也使用MVVM。
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);
            }
        }
    }
}
<ListView 
    SelectedItem
    ItemsSource="{Binding CodeList}" 
    ItemTemplate="{StaticResource InsideListTemplate}"
    ...