绑定嵌套的Listbox

时间:2015-12-06 09:36:50

标签: c# wpf mvvm binding listbox

我有一个嵌套在ListBox中的ListBox。

XAML

 public static int bridge_count1(String[] input1,int input2)
      {
         int count=0;
         Map<Integer,Integer> map=new TreeMap<Integer,Integer>();
         for(int i=0;i<input1.length;i++)
         {
             String cityCon=input1[i];
             String cityArray[]=cityCon.split("#");
             int fst=Integer.parseInt(cityArray[0]);
             int sec=Integer.parseInt(cityArray[1]);
             map.put(fst, sec);
         }

         Iterator<Integer> it=map.keySet().iterator();
         int max=0;
         while(it.hasNext())
         {
             int val=map.get(it.next());
             if(max<=val)
             {
                 max=val;
                 count++;
             }
        }


         return count;

  }

我有两个系列。一个'场景'包含所有场景。我还有另一个收藏设备的藏品。现在我想将设备集合与场景配对,以便它显示每个场景的设备。我该怎么做?

模型

^[0-9,;]+$

视图模型

<ListBox ItemsSource="{Binding Scenes}">

<TextBox Text="{Binding Path=SceneNumber}"/>

   <ListBox ItemsSource="{Binding EquipmentPerScene}"> 
     <ListBox.ItemTemplate>
          <DataTemplate>
             <StackPanel>
                 <TextBlock>
                       <Run Text="{Binding Path=Item}"/>
                 </TextBlock>
             </StackPanel>
         </DataTemplate>
      </ListBox.ItemTemplate>
   </ListBox>
</ListBox>

我试过这个,但这似乎不起作用。我不知道filterparameter。 或者这是完全错误的做法?

public class Scene 
{
    public Scene(string SceneNumber, string SlugLine)
}

public class Gear 
{
    public Equipment(string SceneNumber, string Item)
}

如何配对EquipmentPerScene为该特定listboxItem(场景)显示正确的设备。

1 个答案:

答案 0 :(得分:0)

据我所知,您需要一种可以显示每个Scene对象的扩展数据的机制。我可以考虑两种方法。

<强>实施例  1.第一种是主/细节方法,每个选定的场景都会导致刷新EquipmentPerScene集合视图。对于此方法,您需要添加SelectedScene属性,并且当所选场景更改时,您将启动Update方法,该方法将刷新您的集合视图。这种情况将为您提供SceneNumber进行过滤(SelectedScene对象将)。  2.第二种是Scene对象扩展方法,每个Scene对象都会像你想要的那样提供自己的设备集合(你的解决方案是带有ListBox标签嵌套的包)。对于此方法,您需要将EquipmentPerScene observable collection属性添加到Scene类,并重新模板Scenes Listbox的每个ListBoxItem。像那样:

       <ListBox ItemsSource="{Binding Scenes}">
       <ListBox.ItemContainerStyle>
           <Style TargetType="ListBoxItem">
               <Setter Property="ContentTemplate">
                   <Setter.Value>
                        <DataTemplate DataType="{x:Type soListBoxStyleHelp:Scene}">
                            <StackPanel>
                                <TextBlock>
                                    <Run Text="{Binding Path=SceneNumber}"/>
                                </TextBlock>
                                <ListBox ItemsSource="{Binding EquipmentPerScene}">
                                    <ListBox.ItemTemplate>
                                        <DataTemplate>
                                            <StackPanel>
                                                <TextBlock>
                                                    <Run Text="{Binding Path=Item}"/>
                                                </TextBlock>
                                            </StackPanel>
                                        </DataTemplate>
                                    </ListBox.ItemTemplate>
                                </ListBox>
                            </StackPanel>
                        </DataTemplate>
                    </Setter.Value>
               </Setter>
           </Style>
       </ListBox.ItemContainerStyle>
   </ListBox>

如果您遇到代码和解释方面的问题,我很乐意提供帮助。 的问候,