子控件的绑定无法正常工作

时间:2019-04-16 07:07:01

标签: c# wpf binding

我正在使用C#7,.Net 4.7.2和WPF 4.5.2

我想显示分层数据。因此,我使用ListBox作为顶级控件,使用ListView作为子级控件。不管任何样式,ListBox的DataTemplate都是这样的

<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的属性,ListBox的ItemsSource绑定到该属性。该物业看起来像这样

    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 恰好可以正确显示。属于每个 MyMainDataClass MySubDataClasses 的数量也是正确的。

但是 SomeValue 的内容甚至根本不会消失。您所看到的仅是类 MySubDataClass 的名称。通常,在这种情况下,存在绑定错误,例如,绑定中的属性名称拼写错误。就我而言不是。但是,一定有问题。

我用 diag:PresentationTraceSources.TraceLevel = High 检查了绑定。但是Visual Studio的Output-Window根本不显示任何内容。没有信息,没有警告,没有错误。没有什么绝对的。在ListBox的ItemsSource的绑定上进行相同的跟踪可以正确显示所有内容。

在测试场景中,我还单独尝试了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 :(得分:-1)

我认为ListViewItems的TextBox应该绑定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>

答案 1 :(得分:-1)

# @runnable
class MyClass

    # @runnable
    def say_hello
      puts 'Hello!'
    end

end

像这样的代码,它起作用了。图像就是结果。enter image description here