【问题标题】:Silverlight - DataContext, DataGrid, WCF and adding elements programatically with bindingSilverlight - DataContext、DataGrid、WCF 以及通过绑定以编程方式添加元素
【发布时间】:2012-05-22 19:24:27
【问题描述】:

我是 Silverlight 的新手。

我有一个带有数据网格和其他表单元素的用户控件。 我正在尝试以编程方式实现绑定,从 WCF 服务加载数据。

这就是我所拥有的,我不知道如何让它真正发挥作用:

public class DepartmentObject
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public IEnumerable<Person> People { get; set; }
}    

public partial class DepartmentView : UserControl
{
    ObservableCollection<Person> LocalPeople { get; set; }
    Service1Client client = new Proj.ServiceReference1.Service1Client();

    public TemplateView(Guid departmentId)
    {
        InitializeComponent();

        client.GetDeptCompleted += (sender, e) =>
        {
            this.DataContext = e.Result; //DepartmentObject w/People member IEnumerable<Person>

            this.peopleList.SetBinding(DataGrid.ItemsSourceProperty, new Binding("People"));

            LocalPeople = new ObservableCollection<Person>(e.Result.People);
        };

        client.GetDeptAsync(departmentId);
    }


    private void Add_Person_Click(object sender, RoutedEventArgs e)
    {
        LocalPeople.Add(new Person() { Name = String.Format("Person [{0}]", LocalPeople.Count) });
    }
}

现在,我明白为什么它不起作用了 - 可观察集合和数据上下文之间没有“连接”,但正确的做法是什么?

peopleList是一个DataGrid,当一个人被选中时会有二次绑定。

我希望最终能够点击“保存”并获得 DepartmentObject 中更改的所有内容。

我浏览了 很多 示例,所有 SL 2-3-4 示例都不同且令人困惑。

【问题讨论】:

    标签: wcf silverlight data-binding silverlight-5.0


    【解决方案1】:

    我不确定 e.Result 是否会持续存在。以下应该可以工作:

    client.GetDeptCompleted += (sender, e) =>
    {
       LocalPeople = new ObservableCollection<Person>(e.Result.People);
       this.peopleList.DataContext = LocalPeople; //DepartmentObject w/People member IEnumerable<Person>
       this.peopleList.SetBinding(DataGrid.ItemsSourceProperty, new Binding("."));
    };
    

    在分配 LocalPeople 后设置断点以确保集合不为空。

    【讨论】:

    • 谢谢,它可以工作并且添加一个新的人也可以。如果我希望能够编辑和保留DepartmentObject.Name(或任何其他属性)怎么办 - 使整个事物“可观察”的正确方法是什么?
    • WCF Ria 服务提供客户端更改跟踪,一直到将数据持久保存在服务器端。它是相当有能力的。
    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2012-07-29
    相关资源
    最近更新 更多