[英]WPF: Bind ListView with Multiple Sources
致電所有WPF專家!
我正在將為特定RPG創建字符的應用程序從Window Forms轉換為WPF。 在大多數情況下,該程序的WPF形式要簡單得多。 但是,我似乎一生都無法弄清這一部分。
我有一個數據庫,其中包含角色可以接受的技能列表。 此數據庫是字符所獨有的-更新字符不會更改數據庫。 用戶可以根據需要向數據庫添加新技能,但這與角色創建是分開的。 在角色創建窗口中,我有一個ListView來顯示數據庫中列出的技能。 單擊ListView中的一行將更新描述文本框和Image控件-一切正常。
字符存儲在字符類中; 其中包含角色所采用的技能列表。 該列表並不包含數據庫中的所有技能,因此用戶可以在具有修改后的數據庫的應用程序之間交換該字符而不會出現問題。
我想在同一ListView中顯示字符類的某些字段,以及數據庫中的某些字段。 例如,
名稱(數據庫),級別(字符),得分(字符),MaxTakenCount(數據庫)
我要實現的目標:角色的技能列表將具有零技能,直到用戶將“級別”值提高到大於一的值為止。 更改“級別”將創建該技能的一個實例並將其存儲在角色的技能列表中。 使用存儲在該技能數據庫中的公式(與Name,MaxTakenCount相同的表)來計算分數。 將“級別”設置回零會從角色的技能列表中刪除技能。 運氣好的話,這些值將是兩種方式進行數據綁定,因此我可以使用undo / redo。 (撤消隊列在進行更改時存儲字符對象的序列化副本。)
這個WPF有多大可能? 我不知道如何處理數據庫行和角色的技能列表以完成我想要的事情。 這是我到目前為止所擁有的。 注意:由於我不知道如何正確引用技能列表,因此“分數”和“級別”綁定無效。 技能列表是包含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新手!
嘗試從另一個角度看待這個問題。 ListView.ItemsSource
屬性可以綁定到一個集合項。 因此,首先創建一個類,封裝要在ListView
顯示的所有值。 然后創建一個ObservableCollection<YourClass>
並填充您可以從數據庫中獲得的所有值,然后可以在代碼中或稍后從UI中填充其他值。 然后將此集合綁定到您的ListView.ItemsSource
屬性,它可以根據需要全部工作。
哦...剛注意到發布日期。 嗯,希望這對其他人有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.