DisplayMemberPath显示对象的完整命名空间

时间:2018-04-03 21:25:07

标签: c# wpf

我有一个绑定到可观察集合的列表框。这个可观察的集合包含对象,其中一个是我构建的自定义UI对象,它只是一个按钮和一个复选框。我试图让这个自定义UI对象显示在列表框中。我将它设置为displayMemberPath,但我得到的只是对象的完全限定名称空间。如果我将字段ObjectName设置为displayMemberPath,它就可以正常工作。我做错了什么?

这是xaml:

<ListBox x:Name="ug_playerContainer"
     ItemsSource="{Binding ChildObjectOC}"
     DisplayMemberPath="ChildObjectControl">                                
</ListBox>

以下是业务对象:

public class PlayerCrowdObjectBO {
    public String ObjectName { get; set; }
    public ChildObjectControl ChildObjectControl { get; set; }
}

用于ChildObjectControl的Xaml:

    <StackPanel
            Width="230"
            Height="35"
            Orientation="Horizontal">
            <Button
                Name="btn_childButton"
                Width="200"
                Height="25"
                Margin="5" />
            <CheckBox
                Name="cb_childCheckBox"
                Height="15"
                VerticalAlignment="Center" />
   </StackPanel>

1 个答案:

答案 0 :(得分:2)

它的意思是“你希望我对这个对象做什么?”

接近你正在做的事情的通常方法是绑定一组视图模型并获取列表框以将它们模板化为控件。而不是绑定一堆UI控件。 如果这些都是一种类型,您可以使用itemtemplate。

    <ListBox Name="ViewSelect"
             ItemsSource="{Binding ViewChoices}"
             SelectedItem="{Binding SelectedViewChoice, Mode=TwoWay}"
             >
        <ListBox.ItemTemplate>
            <DataTemplate>
                      <Button Content="{Binding Name}"
                            Command="{Binding ChoiceCommand}"
                               />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

如果不是,您可以使用DataType机制为每种类型定义模板。

    <DataTemplate DataType="{x:Type local:Page1ViewModel}">
        <local:Page1/>
    </DataTemplate>
    <DataTemplate DataType="{x:Type local:Page2ViewModel}">
        <local:Page2/>
    </DataTemplate>