2016-01-16 2 views
1

У меня есть базовое приложение MVVM WPF, которое показывает кучу информации, связанной с пользователем, в DataGrid. В качестве примера я есть два класса (я упростил классы и не реализовали INotifyPropertyChanged как в моем реальном приложении)WPF Поиск Datagrid Combobox

public class Address 
{ 
    public String StreetName { get; set; } 
} 

public class Person 
{ 
    public String Name { get; set; } 
    public String Street { get; set; } 
} 

Мои ViewModel содержит два ObservableCollections.

ObservableCollection<Person>
ObservableCollection<Address>

Я связываю ViewModel к Window и это показывает коллекцию человек просто отлично. Но теперь я хочу, адрес как ComboBox и что пользователь может выбирать только значения из указанной выше коллекции адресов. Что-то вроде таблицы поиска.

Вот мой код XAML. Мне удалось, это показывает адресную коллекцию, но она не покажет мне фактическую запись из коллекции людей в качестве основной записи.

  <DataGridTextColumn Header="Name" Binding="{Binding Name}"></DataGridTextColumn> 
      <DataGridTextColumn Header="Street" Binding="{Binding Street}"></DataGridTextColumn> 

      <DataGridTemplateColumn> 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <ComboBox ItemsSource="{Binding DataContext.addresses, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}}" DisplayMemberPath="StreetName"> 
         </ComboBox> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

ComboBox

ответ

0

Установите свойство SelectedItem или SelectedValue (в зависимости от того, что вы на самом деле связывания с), по адресу. Поэтому, если вы сохранили название улицы, у вас будет следующее:

<DataTemplate> 
    <ComboBox ItemsSource="..." 
       DisplayMemberPath="StreetName" 
       SelectedValuePath="StreetName" 
       SelectedValue="{Binding Street}"/> 
</DataTemplate> 
+0

Я не понимаю, если я теперь должен использовать 'SelectedItem' или' SelectedValue'. Я не могу ни работать, ни работать. –

+0

@HansVader, к чему вы хотите привязать? Весь адресный объект или просто название улицы (например)? – ChrisF

+0

Я просто хочу привязываться к полю 'Street' объекта' Person'. –

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