Обновить проблемы с привязкой данных между Listview и ComboBox - PullRequest
1 голос
/ 09 января 2009

Я борюсь с проблемой связывания в WPF / Silverlight. У меня есть ведьма Listview заполнена DataContext формы запроса EF linq. В том же usercontrol находятся текстовые поля. При изменении их значений, просмотр списка обновляется, а данные изменяются в de db bij .SaveChanges. Проблема в том, что если я использую комбинированный список, данные сохраняются, но де-просмотр списка не обновляется.

Можете ли вы помочь ???? Вот это xaml

     <ListView Grid.Row="1" Grid.Column="0"  Margin="4,4,4,0" x:Name="controlsListBox" Grid.RowSpan="7" ItemsSource="{Binding}" SelectedValuePath="ID" LostFocus="controlsListBox_LostFocus">
        <ListView.View>
           <GridView>
              <GridViewColumn Width="25" Header="Rw" DisplayMemberBinding="{Binding RowNr}"/>
              <GridViewColumn Width="25" Header="Cl" DisplayMemberBinding="{Binding ColumnNr}"/>
              <GridViewColumn Width="100" Header="Name" DisplayMemberBinding="{Binding Name}"/>
              <GridViewColumn Width="25" Header="Tb" DisplayMemberBinding="{Binding TabIndex}"/>
              <GridViewColumn Width="100" Header="Type" DisplayMemberBinding="{Binding ControlTypes.Name}"/>
              <GridViewColumn Width="100" Header="Text" DisplayMemberBinding="{Binding TextResources.Text}"/>
           </GridView>
        </ListView.View>
     </ListView>

     <Label Grid.Row="2" Grid.Column="5" Height="23" Margin="4,4,4,0" x:Name="rowSpanLabel" VerticalAlignment="Top"
            Content="RowNr"/>
     <TextBox Grid.Row="2" Grid.Column="6" Height="23" Margin="4,4,4,0" x:Name="rowSpanTextBox" VerticalAlignment="Top" 
              Text="{Binding Path=SelectedItem.RowNr, ElementName=controlsListBox}"/>

     <Label Grid.Row="4" Grid.Column="1" Grid.ColumnSpan="2" Height="23" Margin="4,4,4,0" x:Name="controlTypeLabel" VerticalAlignment="Top"
            Content="Type"/>
     <ComboBox Grid.Row="4" Grid.Column="2" Grid.ColumnSpan="5" Height="23" Margin="4,4,4,0" x:Name="controlTypeComboBox" VerticalAlignment="Top"
               DataContext="{Binding  Path=ControlTypes, ElementName=controlsListBox}" IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Name"
               SelectedItem="{Binding Path=SelectedItem.ControlTypes, ElementName=controlsListBox, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
               />

А вот код C #: _controlProperties.Clear (); var data = (из x в _dataContext.ControlProperties где x.FormProperties.ID == 1 orderby x.RowNr, x.ColumnNr, x.Name выберите х); foreach (переменная в данных) { item.TextResourcesReference.Load (); _controlProperties.Add (пункт); } // DataContext должен сначала быть установлен в нуль для хорошего результата. controlsListBox.DataContext = null; controlsListBox.DataContext = _controlProperties;

     controlTypeComboBox.DataContext = (from c in _dataContext.ControlTypes
                                        orderby c.Name
                                        select c).ToList();

Ответы [ 2 ]

0 голосов
/ 23 января 2009

Спасибо за ответ. Я только что изменил код для использования классов бизнес-уровня с наблюдаемыми коллекциями. Теперь все отлично работает. Мне все еще интересно, будет ли работать прямая привязка к запросам linq.

0 голосов
/ 09 января 2009

Вы устанавливаете DataContext ComboBox, но не ItemSource. В коде вы перезаписываете этот DataContext, предоставляя список типов элементов управления, так что часть XAML все равно игнорируется.

Удалите объявление DataContext и используйте его вместо:

ItemsSource="{Binding}"

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

Возможно, вы захотите взглянуть на Update Controls .NET , мою альтернативу с открытым исходным кодом для привязки данных WPF. Это берет некоторые из бухгалтерского учета из связанных классов.

...