【问题标题】: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 命令)会很高兴看到你的想法和建议。

标签: c# wpf entity-framework


【解决方案1】:

通过使用 LINQ 查询解决。我的想法是对的 - 有简单的解决方案!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 2011-08-25
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多