【问题标题】:Combobox selected item WPF组合框选定项 WPF
【发布时间】:2016-01-07 07:12:41
【问题描述】:

我尝试了一个从文件夹中检索视频名称的代码。当我从组合框中选择某些项目时,它不会在组合框选择中显示名称。我通过stackoverflow浏览了所有的东西。但没有一个能解决问题。请有任何建议。

代码

public partial class TextToSignWindow : Window
{
    public TextToSignWindow()
    {
        InitializeComponent();
        var rootFolder = System.IO.Path.GetDirectoryName(
        System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
        var root = rootFolder + @"\Videos\";
        string localPath = new Uri(root).LocalPath;
        PopulateListBox(data,localPath, "*.wmv");
    }

    private void PopulateListBox(ComboBox cmb, string Folder, string FileType)
    {
        DirectoryInfo dinfo = new DirectoryInfo(Folder);
        FileInfo[] Files = dinfo.GetFiles(FileType);
        foreach (FileInfo file in Files)
        {
            var ext = Path.GetExtension(file.Name);
            var name = Path.GetFileNameWithoutExtension(file.Name);
            cmb.Items.Add(name);
        }
    }

    private void data_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
    {
        data.SelectedValue =data.SelectedItem.ToString();
    }
}

WPF

<ComboBox x:Name="data" 
          IsEditable="True" 
          FontFamily="verdana" 
          IsSynchronizedWithCurrentItem="True" 
          FontSize="28" 
          Text="" 
          HorizontalAlignment="Left" 
          Height="81" 
          Margin="29,214,0,0" 
          VerticalAlignment="Top" 
          Width="326" 
          SelectionChanged="data_SelectionChanged_1" 
          SelectedItem="{Binding SelectedItem}" />

【问题讨论】:

  • 试试这个:cmd.Items.add(new { FileName = name });删除:SelectedItem="{Binding SelectedItem}" 添加:DisplayMemberPath="FileName" SelectedValuePath="FileName"
  • @Kris 在data.SelectedValue =data.SelectedItem.ToString()传递了一个异常
  • 动态 selectedItem = data.SelectedItem; data.SelectedValue = selectedItem.FileName;
  • @Kris 仍然不显示名称是选中项
  • 当 SelectionChanged 事件触发时,您不应将所选值设置为自身。动态 selectedItem = data.SelectedItem; var SelectedValue = selectedItem.FileName;

标签: c# wpf combobox


【解决方案1】:

您需要包含 DisplayMemberPath

<ComboBox x:Name="data" IsEditable="True" FontFamily="verdana" IsSynchronizedWithCurrentItem="True"  FontSize="28" Text=""  HorizontalAlignment="Left" Height="81" Margin="29,214,0,0" VerticalAlignment="Top" Width="326" SelectionChanged="data_SelectionChanged_1" SelectedItem="{Binding SelectedItem}" DisplayMemberPath="NameOfFieldToDisplay"/>

您可能还需要包含 SelectedValuePath="NameOfSelectedValueField"

例如:通常 DisplayMemberPath 是您的描述字符串,而 SelectedValuePath 是您的 Id int。

这是我当前使用的代码的复制粘贴:

<ComboBox x:Name="comboBoxName" ItemsSource="{Binding ItemsList}" SelectedValuePath="Id" DisplayMemberPath="DisplayName" Width="300"  FontSize="14.667" SelectionChanged="comboBoxName_SelectionChanged">

【讨论】:

    【解决方案2】:

    我尝试了一个示例它有效

    Xaml

     <ComboBox x:Name="data" IsEditable="True" FontFamily="verdana" IsSynchronizedWithCurrentItem="True"  FontSize="28" Text=""  HorizontalAlignment="Left" Height="81" Margin="29,214,0,0" VerticalAlignment="Top" Width="326" SelectionChanged="data_SelectionChanged_1"  />
    

    代码背后

     private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                data.Items.Add("test");
                data.Items.Add("test1");
            }   
    
            private void data_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
            {
                data.SelectedValue = data.SelectedItem.ToString();
            }
    

    【讨论】:

      【解决方案3】:

      不要将您的组合框发送到函数

        private void PopulateListBox(string Folder, string FileType)
      {
          DirectoryInfo dinfo = new DirectoryInfo(Folder);
          FileInfo[] Files = dinfo.GetFiles(FileType);
          foreach (FileInfo file in Files)
          {
              var ext = Path.GetExtension(file.Name);
              var name = Path.GetFileNameWithoutExtension(file.Name);
              data.Items.Add(name);
          }
      }
      

      如果你想发送,请通过 ref 尝试

       private void PopulateListBox(ref ComboBox cmb, string Folder, string FileType)
          {
              DirectoryInfo dinfo = new DirectoryInfo(Folder);
              FileInfo[] Files = dinfo.GetFiles(FileType);
              foreach (FileInfo file in Files)
              {
                  var ext = Path.GetExtension(file.Name);
                  var name = Path.GetFileNameWithoutExtension(file.Name);
                  cmb.Items.Add(name);
              }
          }
      

      【讨论】:

        猜你喜欢
        • 2010-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-26
        • 2013-01-14
        • 1970-01-01
        • 2011-07-04
        相关资源
        最近更新 更多