Привязка субконтроля не работает правильно - PullRequest
0 голосов
/ 16 апреля 2019

Я использую C # 7, .Net 4.7.2 и WPF 4.5.2

Я хочу отображать иерархические данные.Поэтому я использую ListBox в качестве элемента управления верхнего уровня и ListView в качестве элемента управления подуровня.Независимо от каких-либо стилей DataTemplate ListBox выглядит следующим образом:

<DataTemplate>

    <Border>

        <Grid>

            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"    />
                <RowDefinition Height="Auto"    />
            </Grid.RowDefinitions>


            <TextBlock  Grid.Row="0" Text="{Binding SomeTextProperty}" />
            <ListView   Grid.Row="1" ItemsSource="{Binding SubDataClasses}"
                                     ItemContainerStyle="{DynmicRessource MyListViewItem}" />

        </Grid>

    </Border>

</DataTemplate>

. В DataContext есть свойство MyDataSource, к которому привязывается ItemsSource объекта ListBox.Свойство выглядит так:

    public ObservableCollection<MyMainDataClass> MyDataSource { get; set; }

И последнее, но не менее важное: классы данных:

    public class MySubDataClass
    {
        public string SomeValue { get; set; }
    }


    public class MyMainDataClass
    {
        public string SomeTextProperty { get; set; }

        public ObservableCollection<MySubDataClass> SubDataClasses { get; set; }

    }

Привязки в ListBox работают нормально.Но SomeTextProperty случайно отображается правильно.Количество MySubDataClasses , принадлежащих каждому MyMainDataClass , также является правильным.

Но содержимое SomeValue даже никогда не отображается вообще.Все, что вы можете видеть, это имя класса MySubDataClass .Обычно в этом случае возникает ошибка привязки, например, имя свойства в привязке написано с ошибкой.Не в моем случае.Но что-то должно быть не так.

Я проверил привязку с помощью diag: PresentationTraceSources.TraceLevel = High .Но окно вывода Visual Studio вообще ничего не показывает.Нет информации, нет предупреждений, нет ошибок.Там нет абсолютно ничего.Та же самая трассировка на Привязке Источника ItemsS ListBox показывает все правильно.

Я также пробовал ListView отдельно в тестовом сценарии.Работает правильно.Так что в самом ListView нет ничего плохого, кроме как в качестве элемента управления ListBox.

Кто-нибудь может мне помочь, пожалуйста?

Заранее спасибо.

Добавление:

Стиль ListViewItem выглядит следующим образом

<Style x:Key="MyListViewItem" TargetType="{x:Type ListViewItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListViewItem}">
                <TextBox Text="{Binding SomeValue}" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new MyMainDataClass();
    }
}
public class MySubDataClass
{
    public string SomeValue { get; set; }
}
public class MyMainDataClass
{
    public string SomeTextProperty { get; set; }
    public ObservableCollection<MySubDataClass> SubDataClasses { get; set; }
    public MyMainDataClass()
    {
        SomeTextProperty = "test";
        SubDataClasses = new ObservableCollection<MySubDataClass>();
        SubDataClasses.Add(new MySubDataClass() { SomeValue = "test1" });
        SubDataClasses.Add(new MySubDataClass() { SomeValue = "test2" });
    }
}

код, как это, он работал. Изображение является результатом. введите описание изображения здесь

0 голосов
/ 16 апреля 2019

Я думаю, что TextBox ListViewItems должен связывать свойство MySubDataClass

<Style x:Key="MyListViewItem" TargetType="{x:Type ListViewItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListViewItem}">
                <TextBox Text="{Binding MySubDataClass.XXXX}" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...