[英]How to fill ListBox from a List with DelegateCommand in 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.