【问题标题】:WPF Combobox selection changed not reflected correctly to datagridWPF 组合框选择更改未正确反映到数据网格
【发布时间】:2021-09-18 11:38:18
【问题描述】:

我有一个包含不同版本下拉列表的组合框。当我单击组合框中的一个值时,它应该显示此特定版本的响应数据。但是当我运行代码时,对 Combobox 值的第一次单击(比如说 2019 年)没有做任何事情。如果我单击另一个(2020),它会显示与 2019 相关的数据。DataGrid 似乎总是比 Combobox 选择晚单击。

这是我的代码:

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            dropdownList.Items.Add("<all>");
            dropdownList.SelectedIndex = 0;
            grid_Construct();
        }
        private void grid_Construct()
        {
            dataGrid1.Items.Clear();

            .......

            foreach (string file in files)
            {
                .........

                if (version == dropdownList.Text || dropdownList.Text == "<all>")
                {
                    dataGrid1.Items.Add(new pluginItem { addinversion = version, filepath = file });
                }
                if (!dropdownList.Items.Contains(version))
                {
                    dropdownList.Items.Add(version);
                }
            }
        }

        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            grid_Construct();
        }

        public class pluginItem
        {
            public string addinversion { get; set; }
            public string filepath { get; set; }
        }
    }

XAML:

<Grid Grid.ColumnSpan="2" Height="34" VerticalAlignment="Top" Background="#FF9C9B9B">
            <Button x:Name="btnAbout" Content="About" Margin="0,6,24,7" Click="BnAbout_Click" RenderTransformOrigin="1.229,0.459" HorizontalAlignment="Right" Width="58"/>
            <Label Content="Revit Version : " HorizontalAlignment="Left" Height="27" Margin="12,2,0,0" VerticalAlignment="Top" Width="140"/>
            <ComboBox x:Name="dropdownList" HorizontalAlignment="Left" Height="21" Margin="101,6,0,0" 
                      VerticalAlignment="Top" Width="178" SelectionChanged="ComboBox_SelectionChanged" SelectedIndex="0"
                      ItemsSource="{Binding Path=pluginItem}"/>
        </Grid>
        <DataGrid x:Name="dataGrid1" Grid.ColumnSpan="2" Margin="15,54,15,51" Background="White" 
                  HeadersVisibility="Column" MinColumnWidth="5" RowHeight="22" CanUserReorderColumns="False" 
                  AreRowDetailsFrozen="True" RowDetailsVisibilityMode="Visible" CanUserAddRows="False" 
                  SelectionChanged="dataGrid1_SelectionChanged" ItemsSource="{Binding Path=pluginItem}" VirtualizingStackPanel.IsVirtualizing="False">

            <DataGrid.Columns>
                <DataGridTextColumn Header="Version" Width="118*" Binding="{Binding addinversion}" IsReadOnly="True"/>
                <DataGridTextColumn Header="Addin Path" Width="440*" Binding="{Binding filepath}" IsReadOnly="True"/>
            </DataGrid.Columns>

【问题讨论】:

    标签: c# wpf combobox datagrid


    【解决方案1】:

    这是因为您在ComboBox_SelectionChanged(..) 中调用了grid_Construct();,此时尚未应用更改(至少ComboBox.Text),所以ComboBox.Text 返回旧值。

    更正

    if (version == (dropdownList.SelectedValue as string) || (dropdownList.SelectedValue as string) == "<all>")
    

    【讨论】:

      【解决方案2】:

      您应该将versionComboBoxSelectedItem 属性进行比较,而不是Text 属性:

      private void grid_Construct()
      {
          dataGrid1.Items.Clear();
      
          //.......
      
          string selectedItem = dropdownList.SelectedItem as string;
          foreach (string file in files)
          {
              //.........
      
              if (version == selectedItem || selectedItem == "<all>")
              {
                  dataGrid1.Items.Add(new pluginItem { addinversion = version, filepath = file });
              }
              if (!dropdownList.Items.Contains(version))
              {
                  dropdownList.Items.Add(version);
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-24
        • 2011-07-06
        • 2015-11-14
        • 1970-01-01
        • 1970-01-01
        • 2019-11-02
        • 2012-06-05
        相关资源
        最近更新 更多