2009-09-29 84 views
2

调用所有WPF专家!WPF:使用多个来源绑定ListView

我正在将一个应用程序创建为从窗体窗体到WPF的特定RPG。在大多数情况下,该程序的WPF格式更简单;然而,我似乎无法将这部分视为我生命中的一部分。

我有一个数据库,其中包含角色可以采用的技能列表。这个数据库是从字符中排除的 - 更新字符不会改变数据库。用户可以根据需要向数据库添加新技能,但这与角色创建是分开的。在角色创建窗口中,我有一个ListView来显示数据库中列出的技能。点击ListView中的一行可以更新描述文本框和图像控件 - 这一切都可以正常工作。

该字符存储在一个字符类中;其中包含角色所拥有的技能列表。该列表不包含数据库中的所有技能,因此用户可以在修改数据库的应用程序之间交换该字符而不会出现问题。

我想在字符类中显示一些字段,并在同一个ListView中显示数据库中的一些字段。例如,

名称(数据库),级(人物),得分(性格),MaxTakenCount(数据库)

我想达到的目标: 人物的技能列表将具有零级的技能,直到用户提高了'级别'值设置为大于1的值。更改'等级'将创建该技能的一个实例并将其存储在角色的技能列表中。分数是使用存储在数据库中的该技能的公式(与名称MaxTakenCount相同的表格)计算的。将'等级'设置回零可以从角色的技能列表中删除技能。有幸运的是,这些值将是双向数据绑定,所以我可以使用撤销/重做。 (撤消队列存储字符对象的序列化副本,每当发生更改时)。

此WPF有多可能?我不知道如何处理数据库行和角色的技能列表来做我想做的事情。这是我到目前为止。注意:Score和Level绑定不起作用,因为我不知道如何正确引用技能列表。技能列表是包含ListView的选项卡的数据上下文。 ListView的ItemSource在幕后设置为SkillTable。

<ListView Name="listSkills" Margin="10" Grid.Row="2" IsSynchronizedWithCurrentItem="True" Background="#AAFFFFFF" FontSize="14"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="Name"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Name, Mode=TwoWay}" Margin="5" /> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
      <GridViewColumn Header="Score"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding Score, Mode=TwoWay}" Margin="5" /> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
      <GridViewColumn Header="Level"> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <ListBox SelectedIndex="{Binding Level, Mode=TwoWay}"> 
          <ListBox.Style> 
           <Style TargetType="ListBox"> 
            <Setter Property="ItemsPanel"> 
             <Setter.Value> 
              <ItemsPanelTemplate> 
               <StackPanel Orientation="Horizontal" Margin="5,0" HorizontalAlignment="Left" /> 
              </ItemsPanelTemplate> 
             </Setter.Value> 
            </Setter> 
           </Style> 
          </ListBox.Style> 
          <ListBoxItem Width="15"> </ListBoxItem> 
          <ListBoxItem Width="15">S</ListBoxItem> 
          <ListBoxItem Width="15">T</ListBoxItem> 
          <ListBoxItem Width="15">M</ListBoxItem> 
         </ListBox> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

ListView填充数据库中的每一行。数据库列正确填充;但是,字符字段不是。请帮助这个WPF新手!

回答

1

试着从不同的角度来看待这个。 ListView.ItemsSource属性可以绑定到一个集合项目。因此,首先创建一个封装您想要在ListView中显示的所有值的类。然后创建一个ObservableCollection<YourClass>并填充数据库中的任何值,其他值可以填充到代码中,或稍后从UI中填充。然后将此集合绑定到您的ListView.ItemsSource属性,并且它将全部按您的需要工作。

哦......只是注意到了发布日期。好吧,我希望这可以帮助别人。