Laden...

Silverlight verschachtelter TreeView

Erstellt von schaedld vor 14 Jahren Letzter Beitrag vor 14 Jahren 607 Views
schaedld Themenstarter:in
1.433 Beiträge seit 2006
vor 14 Jahren
Silverlight verschachtelter TreeView

Hallo zusammen

Ich bin ein wenig mit den RIA-Services für Silverlight am Experimentieren. Nun habe ich folgendes vor:

  1. Ich will die Objekte von der Datenbank mittels RIA laden (funktioniert)
  2. Der TreeView sieht so aus:
    --> Activity
    --> Child = DataForm, welches die Schritte zur oben genannten Activity darstellen soll.
  3. Das ganze ist nicht MVVM konform da im WrappPanel OnLoad Event die ganze RIA Geschichte gefeuert wird.

Nun habe ich dass Problem, dass der TreeView die Daten erhält und auch darstellt, aber die in den Expandern enthaltenen DataForm bekommen die darunter liegenden Daten nicht.

Ich danke für die Hilfe.


<Grid x:Name="LayoutRoot">         
            <controls:TreeView x:Name="WorkflowTreeView">
            <controls:TreeView.ItemTemplate>
                <DataTemplate>
                    <controlsToolkit:Expander Header="Activity" Margin="10">
                        <controlsToolkit:WrapPanel Loaded="WrapPanel_Loaded">
                            <TextBlock Text="{Binding T_Id}" Margin="10"></TextBlock>
                            <TextBlock Text="{Binding State}" Margin="10"></TextBlock>
                            <dataFormToolkit:DataForm x:Name="StepsDataForm" AutoGenerateFields="True"></dataFormToolkit:DataForm>
                        </controlsToolkit:WrapPanel>
                    </controlsToolkit:Expander>                                     
                </DataTemplate>
            </controls:TreeView.ItemTemplate>
        </controls:TreeView>
  </Grid>

Hier noch die Code-behind.


namespace Buraut.Ais.Workflow.Presentation
{
    public partial class MainPage : UserControl
    {
        private WorkflowPresentationDomainContext _ctx = new WorkflowPresentationDomainContext();

        private IEnumerable _activities = new List<Activity>();
        private IEnumerable _steps = new List<Step>();

        public MainPage()
        {
            InitializeComponent();
            _activities = _ctx.Activities;
            _ctx.Load<Activity>(_ctx.GetActivityQuery());
            WorkflowTreeView.ItemsSource = _activities; 
        }

        private void GetSteps(long activityId)
        {
            _ctx.Load<Step>(_ctx.GetStepQuery(activityId));
        }

        private void WrapPanel_Loaded(object sender, RoutedEventArgs e)
        {
            _activities = _ctx.Activities;
            _ctx.Load<Activity>(_ctx.GetActivityQuery());
            WorkflowTreeView.ItemsSource = _activities; 

            foreach (var activity in _activities)
            {
                Activity ac = (Activity)activity;

                Expander containerExpander = (Expander)WorkflowTreeView.ItemTemplate.LoadContent();
                DataForm stepsDataForm = (DataForm)containerExpander.FindName("StepsDataForm");
                GetSteps(ac.T_Id);
                _steps = _ctx.Steps;
                stepsDataForm.ItemsSource = _steps;
            }
        }
    }
}

Danke für die Rückmeldungen.

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt