2016-06-06 2 views
0

У меня есть listview внутри datagrid, однако у меня возникли проблемы с назначением источника элемента, который зависит от идентификатора ItemsSource="{Binding Users}". Другими словами, я пытаюсь получить представление каждого списка только для отображения данных, соответствующих идентификатору. В настоящее время у меня есть цикл, который будет собирать DataSet данных для пользователя, им просто не удается привязать каждый DataSet.Динамически привязывать listview к соответствующей строке datagrid

<DataGrid Name="dgUsers" ItemsSource="{Binding Users}"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Client" Binding="{Binding Name}"/> 
      <!-- <DataGridTextColumn Header="Land Line" Binding="{Binding LandLine}"/> -->  
     </DataGrid.Columns> 
     <DataGrid.RowDetailsTemplate> 
      <DataTemplate x:Name="datatemplate"> 
       <DockPanel Background="GhostWhite"> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="200"/> 
          <ColumnDefinition Width="200"/> 
          <ColumnDefinition/> 
         </Grid.ColumnDefinitions> 

         <ListView x:Name="lvData" Margin="10,82,10,156" Grid.Column="2" ItemsSource="{Binding view }" SelectedValue="{Binding selectedValue}" MouseDoubleClick="LoadSelectedData" > 
          <ListView.View> 
           <GridView> 
            <GridViewColumn Width="150" DisplayMemberBinding="{Binding type}"> 
             <GridViewColumnHeader Tag="type" Content="Type" FontSize="12"/> 
            </GridViewColumn> 
            <GridViewColumn Width="150" DisplayMemberBinding="{Binding source}"> 
             <GridViewColumnHeader Tag="source" Content="Source" FontSize="12"/> 
            </GridViewColumn> 
            <GridViewColumn Width="180" DisplayMemberBinding="{Binding stage}"> 
             <GridViewColumnHeader Tag="stage" Content="Stage" FontSize="12"/> 
            </GridViewColumn> 


           </GridView> 
          </ListView.View> 
         </ListView> 
+0

Если я правильно понимаю, что вы делаете, обычным способом сделать это было бы поместить предварительно фильтрованный набор подэлементов в каждый элемент datagrid. Вы также можете написать многодиапазонный преобразователь и использовать его с мультисвязью, которая связывает как полную коллекцию, так и идентификатор для нужного подмножества элементов коллекции. Конвертер выполнит фильтрацию и вернет список

+0

@edPlunkett Спасибо за ответ, поэтому самым простым вариантом было бы добавить их в мой пользовательский класс в качестве набора данных перед началом работы? 'public DataSet dataForUser {get; задавать; } ' – Bish25

+0

Это должно быть сделано. Внутри DataTemplate RowDetailsTemplate ваш DataContext должен быть экземпляром класса User, поэтому 'ListView ItemsSource =" {Binding dataForUser} "должен получать строки DataSet в ListView. Если вы попали в ловушку, попробуйте добавить PresentationTraceSources.TraceLevel = High к привязке и проверьте панель VS Output для вывода трассировки, чтобы увидеть, что она пытается сделать. Например: «ItemsSource =» {Binding dataForUser, PresentationTraceSources.TraceLevel = High} "' –

ответ

0

Если я правильно понимаю, что вы делаете - каждый User имеет список свойств - обычный способ сделать это было бы поставить предварительно фильтруется коллекцию объектов имущества по каждому пункту пользователя в datagrid, затем привяжите его к ListView в RowDetailsTemplate. DataContext внутри этого DataTemplate будет некоторый экземпляр User класса, так что, если совокупность свойств пользовательских User.dataForUser, вы бы просто связать так:

<ListView ItemsSource="{Binding dataForUser}" ... /> 

И что должны это сделать.

Вы также можете написать multi-value converter и использовать его с помощью многосвязной связи, которая связывает как полную коллекцию, так и идентификатор пользователя, чтобы отфильтровать нужное подмножество элементов коллекции. Конвертер выполнит фильтрацию и вернет List<SomeUserPropertyClass>. Не нужно делать это ObservableCollection, так как вы не вносите никаких изменений в него после того, как IMultiDataConverter.Convert() вернет его. Но привязка к полной коллекции будет означать привязку RelativeSource, чтобы получить это свойство из главной модели. Много шума в вашем XAML.

На мой взгляд, построение этого отношения между мастером и деталью в классах viewmodel является подходящим и удобным.

 Смежные вопросы

  • Нет связанных вопросов^_^