Gong WPF проблема с ComboBox внутри элемента списка - PullRequest
0 голосов
/ 25 июня 2018

Здравствуйте, я использую Gong WPF для изменения порядка Items внутри ListBox

<Window x:Class="ComboBoxIssue.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:local="clr-namespace:ComboBoxIssue"
    xmlns:dd="urn:gong-wpf-dragdrop"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525">
<ListBox 
    dd:DragDrop.IsDragSource="True"
    dd:DragDrop.IsDropTarget="True"
    ItemsSource="{Binding Layers}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <local:UserControl1/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

GongWpf предоставляет AttachedProperties для включения перетаскивания в ListBox:

dd:DragDrop.IsDragSource="True"
dd:DragDrop.IsDropTarget="True"

ListBox ItemSource привязан к наблюдаемой коллекции Layer в основной ViewModel.

public class ViewModel
{
    public ViewModel()
    {
        Layers = new ObservableCollection<Layer> { new Layer(), new Layer(), new Layer(), new Layer() };
    }
    public ObservableCollection<Layer> Layers { get; }
}

На данный момент Layer - это просто пустой класс, используемый для отображения проблемы:

public class Layer
{

}

UserControl, используемый как DataTemplate, содержит ComboBox:

<ComboBox Height="25" Width="100">
    <ComboBoxItem>HELLO</ComboBoxItem>
    <ComboBoxItem>BONJOUR</ComboBoxItem>
    <ComboBoxItem>NIHAO</ComboBoxItem>
</ComboBox>

Теперь, когда я переупорядочиваю элементы с помощью перетаскивания в пределах ListBox, выброшенный ComboBox SelectedItem больше не виден.

Почему?

Спасибо

1 Ответ

0 голосов
/ 26 июня 2018

Почему?

Поскольку вы не связали его со свойством источника класса Layer.Если вы добавите, например, свойство:

public class Layer
{
    private string _selectedItem;
    public string SelectedItem
    {
        get => _selectedItem;
        set => _selectedItem = value;
    }
}

... и привяжете к нему свойство SelectedItem ComboBox:

<ListBox 
    dd:DragDrop.IsDragSource="True"
    dd:DragDrop.IsDropTarget="True"
    ItemsSource="{Binding Layers}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <ComboBox Height="25" Width="100" SelectedItem="{Binding SelectedItem}"
                      xmlns:s="clr-namespace:System;assembly=mscorlib">
                <s:String>HELLO</s:String>
                <s:String>BONJOUR</s:String>
                <s:String>NIHAO</s:String>
            </ComboBox>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

... оно будет работать нормальнодля меня.

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