需要一些关于自定义字符表的帮助和提示
Posted
技术标签:
【中文标题】需要一些关于自定义字符表的帮助和提示【英文标题】:Need some help and tips with custom character sheet 【发布时间】:2021-06-15 15:10:57 【问题描述】:我使用 c# 作为主要编程语言。将 EF 链接到 WPF 应用程序。 我想要的东西:保存\加载角色或/和玩家信息并使用它的可能性。 我有的东西:
带有玩家和角色表的本地数据库。 玩家有:
P_ID
P_Name
人物有
id (int)
name (nvarchar50)
pid (int)
STR (int)
DEX (int)
INT (int)
我发现实体框架是我想要的很好的解决方案(至少我是这么认为的)。
目前我的角色和玩家类看起来像这样:
public class Character
[Key]
public int id get; set;
public string name get; set;
public int pid get; set;
public int STR get; set;
public int DEX get; set;
public int INT get; set;
[ForeignKey("pid")]
public virtual Player Player get; set;
public class Player
[Key]
public int P_ID get; set;
public string P_Name get; set;
public virtual ICollection<Character> Characters get; set;
MyDBcontext 类:
public class MyDBcontext : DbContext
public MyDBcontext() : base("Datasex_0._1.Properties.Settings.StraightCon")
public DbSet<Player> Players get; set;
public DbSet<Character> Characters get; set;
和 MainWindow.xaml.cs 代码:
public partial class MainWindow : Window
MyDBcontext mdb;
List<Player> playerlist = new List<Player>();
List<Character> charlist = new List<Character>();
public MainWindow()
InitializeComponent();
mdb = new MyDBcontext();
mdb.Players.Load();
mdb.Characters.Load();
var charlist = mdb.Characters.ToList();
var playerlist = mdb.Players.ToList();
PlayerBox.ItemsSource = mdb.Players.ToList();
CharacterData.ItemsSource = charlist;
this.Closing += MainWindow1_Closed;
private void MainWindow1_Closed(object sender, EventArgs e)
mdb.Dispose();
我需要什么:
我已将用于测试目的的数据网格链接到一个列表。与此有关的问题:datagrid 显示这样的玩家:
我不需要玩家在 charlist 中。 为什么我需要列表 - 在这里我发现可以使用列表进行组合框比较。
我需要在玩家框(第一个组合框)中显示所有玩家 - 我做到了。 然后我需要在 Characterbox 组合框中显示通过 pid 绑定到玩家 P_ID 的字符。
在此之后,我需要在文本框中显示(我将在完成字符任务后添加)字符统计信息(str dex 和 int)。 然后我需要将自定义播放器添加到数据库的功能(我知道怎么做,因为在 winforms 应用程序中对其进行了测试)。
然后我需要在playerbox中根据选择的玩家添加自定义角色(我不知道怎么做)。
最后我需要能够在 UI 中更改字符信息(名称、str、dex 等)。
感谢您的帮助和提示,抱歉我的英语不好。
编辑: 添加了一些我认为不起作用的东西:
private string[] getcharbyid (int pid)
return charlist.Where(Line => Line.pid == pid).Select(l => l.name).ToArray();
和
private void PlayerBox_SelectionChanged(对象发送者,SelectionChangedEventArgs e) if (CharacterBox != null) CharacterBox.Items.Clear();
int xid = charlist[PlayerBox.SelectedIndex].pid;
indextest.Content = xid;
foreach (string name in getcharbyid(xid))
this.CharacterBox.Items.Add(name);
应用程序启动时显示:System.ArgumentOutOfRangeException
这样比较 id 和 index:
PlayerData.ItemsSource = mdb.Players.ToList();
int xid = PlayerBox.SelectedIndex;
indextest.Content = xid;
似乎 id 和 index (或者我做错了什么)是相同的。 尝试更改 foreach 失败。
更改了一些代码以将字符添加到字符框:
int xid;
Int32.TryParse(PlayerBox.SelectedValue.ToString(), out xid);
indextest.Content = xid;
CharacterBox.Items.Add (from Character in charlist where Character.pid == xid select Character);
CharacterBox.DisplayMemberPath = "name";
CharacterBox.SelectedValuePath = "id";
看起来像是添加到组合框中的字符,但我没有看到它们的名称和值:
空字符组合框?
【问题讨论】:
如果我做错了什么并且有很多简单的方法可以做到这一点(比如扔掉 EF 和 stat 处理 sql 命令)会很高兴看到你的想法和建议。 【参考方案1】:通过使用 LINQ 查询解决。我的想法是对的 - 有简单的解决方案!
【讨论】:
以上是关于需要一些关于自定义字符表的帮助和提示的主要内容,如果未能解决你的问题,请参考以下文章
有啥软件可以自定义字 也就是自己想写啥就写啥 并把写的字弄成