Combobox IsEditable ломает мою привязку данных - PullRequest
1 голос
/ 02 июля 2019

У меня есть Combobox с источником элемента для коллекции ObservableCollection

listSites = new ObservableCollection<SiteData>()
        {
            new SiteData("Site 1", true, "HomeAutomation", "Green"),
            new SiteData("Site 2", true, "HomeAutomation", "Green"),
            new SiteData("Site 3", true, "HomeAutomation", "Green"),
            new SiteData("Site 4", false, "HomeAlert", "Red"),
            new SiteData("Site 5", true, "HomeAutomation", "Green"),
            new SiteData("Site 6", true, "HomeAutomation", "Green"),
            new SiteData("Site 7", true, "HomeAutomation", "Green"),
            new SiteData("Site 8", false, "HomeAlert", "Red"),
            new SiteData("Site 9", true, "HomeAutomation", "Green"),
            new SiteData("Site 10", false, "HomeAlert", "Red"),
        };
        cbxSites.ItemsSource = listSites;

В Combobox также есть ItemTemplate для StaticResource:

<ComboBox x:Name="cbxSites" VerticalAlignment="Top" Width="250" Margin="0, 
0, 0, 0" BorderBrush="White"
                  ItemsSource="{Binding listSites}" ItemTemplate=" 
{StaticResource SiteComboBoxItemTemplate}" 
HorizontalContentAlignment="Center"
                      SelectionChanged="CbxSites_SelectionChanged" 
IsEditable="True" />


<DataTemplate x:Key="SiteComboBoxItemTemplate">
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
            <materialDesign:PackIcon Kind="{Binding StatusIcon}" 
Width="30" Height="30" Foreground="{Binding StatusColour}"

VerticalAlignment="Center" HorizontalAlignment="Right" />
            <TextBlock Text="{Binding SiteName}" Margin="20, 0, 0, 0" />
        </StackPanel>
    </DataTemplate>

Когда IsEditable на ComboBox установлен вfalse, привязка работает, и я могу нажать на поле со списком и увидеть все имена (сайт 1, сайт 2, сайт 3 и т. д.) и, щелкнув по элементу, он заполняет то же имя в списке, как и ожидалось.Когда IsEditable имеет значение true, раскрывающийся список Combobox по-прежнему правильно отображает имена сайтов (Сайт 1, Сайт 2, Сайт 3 и т. Д.), Но когда я выбираю один, вместо того же имени того сайта, который заполнен в Combobox, я вижуВместо этого "CipClient.SiteData".Почему это и как я могу это исправить?

1 Ответ

0 голосов
/ 02 июля 2019

WPF IsEditable = true. ComboBox, заполненный объектами, отображает ToString () в качестве выбранного элемента. Вы можете это исправить:

<ComboBox x:Name="cbxSites" VerticalAlignment="Top" Width="250" Margin="0, 0, 0, 0" BorderBrush="White"
                  ItemsSource="{Binding listSites}" IsTextSearchEnabled="True" TextSearch.TextPath="SiteName"  ItemTemplate="{StaticResource SiteComboBoxItemTemplate}" HorizontalContentAlignment="Center" SelectionChanged="CbxSites_SelectionChanged" 
IsEditable="true" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...