如何在WPF的列表视图中访问组合框所选值

本文关键字:组合 访问 视图 WPF 列表 | 更新日期: 2023-09-27 18:14:48

如何获取列表视图中显示的组合框的选定值

下面是我的代码:

cbPriority是我的组合框的名称。

<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="-1094,0,2,24" RenderTransformOrigin="0.621,0.497" MinHeight="750" MinWidth="650">
    <ListView Name="lvShowSearching" ItemsSource="{Binding Path=.}" MinHeight="300" MinWidth="400" RenderTransformOrigin="2.25,4" Margin="1129,213,26,187" VerticalAlignment="Center" BorderThickness="2" BorderBrush="#FF90A1CD" Background="White" >
        <ListView.View>
            <GridView>
                <GridViewColumn Width="0" DisplayMemberBinding="{Binding KeywordID}">
                    <ItemsPanelTemplate>
                        <StackPanel Visibility="Hidden"></StackPanel>
                    </ItemsPanelTemplate>
                </GridViewColumn>
                <GridViewColumn Header="Publication" Width="100" DisplayMemberBinding="{Binding PublicationName}" />
                <GridViewColumn Header="Total Records" Width="100" DisplayMemberBinding="{Binding TotalRecords}" />
                <GridViewColumn Header="Records Imported" Width="100" DisplayMemberBinding="{Binding TotalRecordsImported}" />
                <GridViewColumn Header="Status" Width="100" DisplayMemberBinding="{Binding Status}" />
                <GridViewColumn Header="Priority" Width="100">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <ComboBox Name="cbPriority" Width="80" Height="22">
                                <ComboBoxItem IsSelected="True">1</ComboBoxItem>
                                <ComboBoxItem>2</ComboBoxItem>
                                <ComboBoxItem>3</ComboBoxItem>
                                <ComboBoxItem>4</ComboBoxItem>
                                <ComboBoxItem>5</ComboBoxItem>
                                <ComboBoxItem>6</ComboBoxItem>
                                <ComboBoxItem>7</ComboBoxItem>
                                <ComboBoxItem>8</ComboBoxItem>
                                <ComboBoxItem>9</ComboBoxItem>
                                <ComboBoxItem>10</ComboBoxItem>
                            </ComboBox>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
    <Button Content="Add Filter" HorizontalAlignment="Left" Margin="1761,113,0,0" VerticalAlignment="Top" Width="94" Click="Filter_Click"/>
</Grid>

如何在WPF的列表视图中访问组合框所选值

在视图模型中创建一个新属性,以及其他属性,如KeywordID, PublicationName, TotalRecords, Status等

例子
    public object SelectedComboItem { get; set; }
并将其绑定到ComboBox selecteditem
    <ComboBox Name="cbPriority" Width="80" Height="22" 
              SelectedItem="{Binding SelectedComboItem}">

或者更好的名字是

    public object SelectedPriority { get; set; }

和绑定

    <ComboBox Name="cbPriority" Width="80" Height="22" 
              SelectedItem="{Binding SelectedPriority}">

如果你想要一个int属性你可以选择

public int SelectedPriority { get; set; }
<ComboBox Name="cbPriority"
          Width="80"
          Height="22"
          xmlns:sys="clr-namespace:System;assembly=mscorlib"
          SelectedItem="{Binding SelectedPriority,FallbackValue=1}">
    <sys:Int32 >1</sys:Int32>
    <sys:Int32>2</sys:Int32>
    <sys:Int32>3</sys:Int32>
    <sys:Int32>4</sys:Int32>
    <sys:Int32>5</sys:Int32>
    <sys:Int32>6</sys:Int32>
    <sys:Int32>7</sys:Int32>
    <sys:Int32>8</sys:Int32>
    <sys:Int32>9</sys:Int32>
    <sys:Int32>10</sys:Int32>
</ComboBox>

将组合框绑定到值集合

绑定到一个集合,而不是xaml

中的静态值

在与属性SelectedPriority相同的类中创建一个属性并相应地初始化它

例子
public static IEnumerable<int> Priorities { get; set; }

将组合框绑定为

<ComboBox Name="cbPriority"
          Width="80"
          Height="22"
          SelectedItem="{Binding SelectedPriority,FallbackValue=1}"
          ItemsSource="{Binding Priorities}" >

或者如果您想将组合框绑定到所有人通用的值列表,请为相同的

创建静态属性。

namespace CSharpWPF
{
    class MyClass
    {
        static MyClass()
        {
            Priorities = Enumerable.Range(1, 10);
        }
        public static IEnumerable<int> Priorities { get; set; }
    }
}

按此方式绑定

<ComboBox Name="cbPriority"
          Width="80"
          Height="22"
          xmlns:l="clr-namespace:CSharpWPF"
          SelectedItem="{Binding SelectedPriority,FallbackValue=1}"
          ItemsSource="{Binding Source={x:Static l:MyClass.Priorities}}" >

我在示例中添加了名称空间,以显示使用x:Static的正确绑定,您可以选择拥有自己的名称空间

我通过使用WPF Toolkit网格(http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=29117)和一系列选定的项目来"解决"我的问题,这可能是一个更干净的解决方案。不能解释GridView的行为,这对我来说很不寻常