繁体   English   中英

无法使用列表中的数据填充列表框网格列,wpf

[英]Cannot fill a listbox gridcolumns with data from a list, wpf

在这个爱好项目中,我想填写一个 wpf 列表框。 我有一个类似的列表框,显示按列格式化的数据没有问题,所以我复制了 XAML 和代码,但下一个列表框什么也没显示。 如果我删除网格列中的格式,我可以用数据填充列表框。 所以源列表是可以的。 但是列中的格式一定是问题所在。

我有一个 class Rounds,其中我有一个添加数据的方法。

我有 XAML 和密码。

怎么了?

    Class:
    namespace BettingPoker
    {
    internal class Rounds 
    {
    private string  RoundName { get; set; }
    private int RoundNumber { get; set; }

   

    public Rounds(string roundname,  int roundnumber)

    {
        this.RoundName = roundname;
        this.RoundNumber = roundnumber;
      
}
    public static List<Rounds> roundList = new List<Rounds>();

    public void TilføjTilRound(string name, int number)
    {

        roundList.Add(new Rounds(name, number));

    }


    public override string ToString()
    {
        if (RoundName != null)
            return RoundName + "  " + RoundNumber;
        return "Problem";
    }


   }
   }

   XAML:

   <ListBox x:Name="listBoxRunder" Height="135" Margin="478,244,170,0" 
   VerticalAlignment="Top" ItemsSource="{Binding}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Margin="0,2">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="10"></ColumnDefinition>
                        <ColumnDefinition Width="30"></ColumnDefinition>
                        <ColumnDefinition Width="2"></ColumnDefinition>
                        <ColumnDefinition Width="30"></ColumnDefinition>
                        <ColumnDefinition Width="2"></ColumnDefinition>
                      
                    </Grid.ColumnDefinitions>

                    <TextBox Text="{Binding RoundName}" Grid.Column="1"></TextBox>
                    <TextBox Text="{Binding RoundNumber}" Grid.Column="3"></TextBox>
                    
                </Grid>
            </DataTemplate>
          </ListBox.ItemTemplate>
        </ListBox>

        CS code:
        Rounds runde = new Rounds("", 0);
        runde.TilføjTilRound("Blinds", 0);
        runde.TilføjTilRound("Preflop", 1);
        runde.TilføjTilRound("Flop", 2);
        runde.TilføjTilRound("Turn", 3);
        runde.TilføjTilRound("River", 4);

        listBoxRunder.ItemsSource = Rounds.roundList;

这些是属性:

private string  RoundName { get; set; }
private int RoundNumber { get; set; }

它们目前只能由您的 Rounds class 访问,因为它们被设置为私有,这意味着只有 Rounds 可以读取和写入这些属性。 在 XAML 中,您正在尝试访问这些属性,但它们不存在。 我怀疑您在调试器中收到某种警告提示。

我不完全确定,但由于您的 class 设置为内部,这也可能是导致问题的原因。 当我第一次开始编程时,我几乎毫无例外地将所有内容都设置为公开,直到我更好地理解如何使用访问修饰符来发挥我的优势。 我鼓励您在这里阅读它们,本文讨论了变量、方法和类的访问修饰符。
https://learn.microsoft.com/en-us/do.net/csharp/programming-guide/classes-and-structs/access-modifiers

您应该更改的代码的另一个方面是设置属性的方式,您应该使用私有字段和公共属性。 在您的代码中,您总是直接调用属性,并且字段仅在属性内部使用 - 这使您能够调用 OnPropertyChanged() 方法,该方法在属性值更改时动态更新 UI。

尝试这个:

    namespace BettingPoker
    {
      //set class to public and implement INotifyPropertyChanged
      public class Rounds : INotifyPropertyChanged
      {
         /*
          these are called fields.  Use them in your properties to make 
          use of OnPropertyChanged();
          */
         private string _roundName, roundNumber;
         
         public string  RoundName
         { 
           get return _roundName; 
           set _roundName = value; OnPropertyChanged(); 
         }
         public int RoundNumber 
         { 
           get return _roundNumber; 
           set _roundNumber = value; OnPropertyChanged(); 
         }
      }//close class
  }//close namespace

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM