【问题标题】:Using ObservableCollection and Binding WPF使用 ObservableCollection 和绑定 WPF
【发布时间】:2011-10-10 00:25:28
【问题描述】:

我知道这个问题可能听起来与我的上一个问题相似,但这是一种与其他人的建议不同的方法。走一条不同的路线我试图将列表视图中的内容绑定到几个文本框。我对 WPF 非常陌生,不确定我是否做对了。我猜这是一种 MVVP 方法。现在这个程序做的不多。列表视图中有一项,但它是空的(没有姓名、年龄、年级)。当我尝试在列表视图中选择它时,我可以看到它突出显示的项目 b/c。任何帮助是极大的赞赏。

有一个类可以创建一个字符串名称,int age ,int Grade,并具有 getter 和 setter 方法。班级名称叫Camper(年龄、年级、姓名)

类 BindingCamper:制作 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" />

【问题讨论】:

  • 请告诉我们Camper
  • 如果您不熟悉数据绑定,请阅读overview...

标签: c# wpf mvvm


【解决方案1】:

您需要在视图模型中创建要绑定的公共属性。

你不应该在 .Net 中创建 getSomething() 方法。

【讨论】:

    【解决方案2】:

    对于您的 ListView 声明中的此代码:

    DisplayMemberPath="name"
    

    您使用的是字段名称而不是属性。我不认为数据绑定对字段有效,即使它们是公开的(老实说,我一直不明白为什么会这样)。

    您似乎也在其他几个地方这样做了——确保您绑定到该属性,并确保名称正确(区分大小写)。

    编辑:正如 SLaks 所指出的(直到他指出我才注意到这一点),您将方法用作属性。我认为它们需要是带有 getter 的实际 .Net 属性,例如:

    public string Name
    {
      get { return _name; }
    }
    

    【讨论】:

    • 你刚刚回答了一个困扰我(和我的代码)几个小时的问题!只需添加 { get;放; } 到 >public string Name
    猜你喜欢
    • 1970-01-01
    • 2015-01-26
    • 2013-10-14
    • 2015-04-02
    • 2013-04-18
    • 1970-01-01
    • 2011-06-16
    • 2014-05-25
    • 2017-09-29
    相关资源
    最近更新 更多