1

私はSilverlightを初めて使用します。

datagridやその他のフォーム要素を使用したユーザーコントロールがあります。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の例はすべて異なり、混乱を招きます。

4

1 に答える 1

0

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が割り当てられた後にブレークポイントを設定して、コレクションが空でないことを確認します。

于 2012-05-15T09:59:42.447 に答える