Создать список выбора из другой таблицы в combobox wpf ef6 - PullRequest
0 голосов
/ 03 марта 2020

Впереди, я новичок ie. Я создаю окно со множеством списков, функционирующих как списки выбора. У меня есть код позади xaml и автоматически сгенерированные файлы в приложении wpf ef6. У меня есть таблица (InspectionTypes) со свойствами InspectionsID (Int) и InspectionName (String). В моем окне с оценками у меня есть поле со списком, который я хочу перечислить и просмотреть / выбрать InspectionTypeName и сохранить InspectionsID в записи.

Вот моя часть XAML для поля со списком:

{           <ComboBox x:Name="inspectionType1ComboBox" 
                  Grid.Column="2" Grid.Row="1" Height="Auto" Width="200" Margin="3"
                  HorizontalAlignment="Left" VerticalAlignment="Center"
                  ItemsSource="{Binding}"
                  DisplayMemberPath="InspectionType1">
            <ComboBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel/>
                </ItemsPanelTemplate>
            </ComboBox.ItemsPanel>
        </ComboBox>
}

Я пытался использовать LINQ-запрос и ObservableCollection. В настоящее время я получаю исключение: System.FormatException: 'Входная строка была не в правильном формате.'

Это исключение было первоначально сгенерировано в этом стеке вызовов: System.Number.StringToNumber (string, System.Globalization .NumberStyles, ref System.Number.NumberBuffer, System.Globalization. System.Convert.ChangeType (объект, System.Type, System.IFormatProvider) MS.Internal.Data.SystemConvertConverter.Convert (объект, System.Type, объект, System.Globalization.CultureInfo) MS.Internal.Data.DynamicValueConverter.Convert ( object, System.Type, object, System.Globalization.CultureInfo) System. Windows .Controls.Primitives.Selector.VerifyEqual (object, System.Type, object, MS.Internal.Data.DynamicValueConverter) System. Windows. Controls.Primitives.Selector.FindItemWithValue (object, out int) System. Windows .Controls.Primitives.Selector.SelectItemWithValue (object, bool) System. Windows .Controls.Primitives.Selector.OnItemsChanged (System.Collections.Specialized.NotifyCollectionChangedEventArgs)

1011 за: *

Я пытался найти ответ в течение нескольких недель безуспешно. Не могли бы вы помочь?

1 Ответ

0 голосов
/ 03 марта 2020

Не устанавливайте комбинированный список из xaml.cs, используя ItemsSource в методе. Вы можете сделать свойство для того же самого и связать его в xaml. Эта проблема возникает из-за того, что вы назначаете данные до отображения представления.

public partial class MainWindow : Window
{
    public ObservableCollection<InspectionType> observablelist { get; set; 

    public MainWindow()
    {
        InitializeComponent();
        System.Windows.Data.CollectionViewSource cvs = ((System.Windows.Data.CollectionViewSource)(this.FindResource("cvs")));
        DataContext = this;
        FillComboBoxes();
    }

    private void FillComboBoxes()
    {

        observablelist = new ObservableCollection<InspectionType>();
        observablelist.Add(new InspectionType()
        {
            InspectionTypeName = "ABC",
            InspectionTypesID = 1
        });

    }
}

xaml.cs

      <Window x:Class="WpfApp1.MainWindow"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
    xmlns:dat="clr- 
       namespace:System.Windows.Data;assembly=PresentationFramework"
    xmlns:local="clr-namespace:WpfApp1"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="500" 
    Loaded="Window_Loaded">
   <Window.Resources>

    <CollectionViewSource Source="{Binding observablelist}"
                          x:Key="cvs">
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="InspectionTypeName" />
        </CollectionViewSource.SortDescriptions>
        <CollectionViewSource.GroupDescriptions>
            <dat:PropertyGroupDescription PropertyName="InspectionTypesID" />
        </CollectionViewSource.GroupDescriptions>
    </CollectionViewSource>

</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto" />
        <RowDefinition Height="50" />
        <RowDefinition Height="auto" />
    </Grid.RowDefinitions>
    <ListBox ItemsSource="{Binding Source={StaticResource cvs}}"
             DisplayMemberPath="InspectionTypeName"
             Name="lb">
        <ListBox.GroupStyle>
            <x:Static Member="GroupStyle.Default" />
        </ListBox.GroupStyle>
    </ListBox>
    <ComboBox Grid.Row="2"
              Height="100"
              AllowDrop="True"
              Width="100"
              DisplayMemberPath="InspectionTypeName"
              SelectedValuePath="InspectionTypesID"
              ItemsSource="{Binding observablelist}"></ComboBox>


  </Grid>
 </Window>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...