我知道这个问题听起来可能与我的上一个问题类似,但这是一种不同于其他建议的方法。走另一条路线我试图将列表视图中的什么绑定到几个文本框。我对WPF非常陌生,不确定我是否正确行事。我想这是一个MVVP方法。目前该计划并没有做太多。列表视图中有一个项目,但它是空的(没有名称,年龄,等级)。当我尝试在列表视图中选择它时,我可以看到它突出显示的项目b / c。任何帮助是极大的赞赏。
有一个类可以生成字符串名称,int age,int grade,并且具有getter和setter方法。班级名称叫做Camper(年龄,年级,姓名)
Class BindingCamper:make observablecollection
public class Camper
{
public Camper[] requests;
public int[] relationValues;
public String name;
private String school;
public int age;
public int grade;
private Boolean isGrouped = false;
private string group;
public Camper(int a, int g, String n)
{
requests = new Camper[4];
relationValues = new int[4];
name = n;
this.age = a;
this.grade = g;
}
public Camper(String n)
{
this.requests = new Camper[4];
this.relationValues = new int[4];
this.name = n;
}
public Camper()
{
}
// Getter Methods
public string getName()
{
return name.ToString();
}
public string getSchool()
{
return this.school;
}
public int getAge()
{
return this.age;
}
public int getGrade()
{
return this.grade;
}
public int getRelationValue(int i)
{
if (i < relationValues.Length)
{
return relationValues[i];
}
else
{
return 0;
}
}
class BindingCamper
{
public ObservableCollection<Camper> Campers { get; private set; }
public BindingCamper()
{
Campers = new ObservableCollection<Camper>();
}
另一个班级(页面):
public partial class CampersPage : Page
{
MainWindow _parentForm;
public ObservableCollection<Camper> Campers { get; private set; }
public CampersPage(MainWindow parent)
{
_parentForm = parent;
InitializeComponent();
// Campers = new ObservableCollection<Camper>();
var bindMe = new BindingCamper();
Camper CampMe = new Camper(3, 4, "Tony Lagarrigue");
// CampMe.getName();
bindMe.Campers.Add(CampMe);
DataContext = bindMe;
XAML绑定一切。 :
<ListView HorizontalAlignment="Left" Margin="10,10,0,40" x:Name ="listViewCampers" Width="200" SelectionChanged="listViewCampers_SelectionChanged" ItemsSource="{Binding Campers}" DisplayMemberPath="name" IsSynchronizedWithCurrentItem="{x:Null}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" Width="100" />
<GridViewColumn Header="Age" DisplayMemberBinding="{Binding Age}" Width="40" />
<GridViewColumn Header="Grade" DisplayMemberBinding="{Binding Grade}" Width="40" />
</GridView>
</ListView.View>
</ListView>
<Grid Height="Auto" HorizontalAlignment="Stretch" Margin="209,12,0,0" Name="infoGrid" VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="134*" />
<RowDefinition Height="154*" />
</Grid.RowDefinitions>
<Label Content="Name" Height="28" HorizontalAlignment="Left" Margin="23,24,0,0" Name="lblName" VerticalAlignment="Top" />
<TextBox Text="{Binding name, ElementName=listViewCampers}" Height="23" HorizontalAlignment="Left" Margin="23,46,0,0" Name="txtName" VerticalAlignment="Top" Width="120" AcceptsReturn="True" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="23,103,0,0" Name="txtAge" VerticalAlignment="Top" Width="120" />
答案 0 :(得分:4)
您需要在viewmodel中创建要绑定到的公共属性。
你永远不应该在.Net中使用getSomething()
方法。
答案 1 :(得分:0)
对于ListView声明中的此代码:
DisplayMemberPath="name"
您使用的是字段名称而不是属性。我认为数据绑定不会对字段起作用,即使它们是公开的(说实话,我也从未理解为什么会出现这种情况)。
看起来你也是在其他几个地方这样做 - 确保你绑定到属性,并确保名称是正确的(这是区分敏感)。
编辑:正如SLaks所指出的那样(我没有注意到这一点,直到他指出),你正在使用方法作为属性。我认为它们需要是带有getter的实际.Net属性,例如:
public string Name
{
get { return _name; }
}