2013-04-01 3 views
0

Я работаю над проектом класса, и мне сложно установить выбранные элементы в списке. Я создал класс собак, в котором есть наблюдаемая коллекция пород. На моем главном экране у меня есть список, из которого вы можете выбрать собаку. Экран собаки обновления открывается, когда выбрана собака, и активируется событие кнопки обновления. На экране «Обновить собаку» есть окно со всеми породами собак. Мой вопрос: как установить выбранные элементы в списке, чтобы связать их с собаками?Как загрузить выбранные элементы в списке

Вот код для события btnUpdateDog_Click:

private void btnUpdateDog_Click(object sender, RoutedEventArgs e) 
    { 
     if (this.lstDogListBox.SelectedItem != null) 
     { 
      Dog selectedDog = (Dog)this.lstDogListBox.SelectedItem; 
      var dogId = selectedDog.DogId; 
      var _selectedDog = _dogRepository.Fetch(dogId).SingleOrDefault(); 

      UpdateDogWindow updateDogWindow = new UpdateDogWindow(dogId); 

      updateDogWindow.Owner = windowClientApplication; 

      updateDogWindow.DataContext = _selectedDog; 

      updateDogWindow.ShowDialog(); 

      if (updateDogWindow.ShowDialog() == true) 
      { 
       LoadSearchResults(); 
      } 
     } 
    } 

Вот конструктор для UpdateDogWindow

public UpdateDogWindow(int criteria) 
    { 
     _dogRepository = new DogRespository(); 

     var _dogQuery = _dogRepository.Fetch(criteria); 

     this.DataContext = _dogQuery; 

     InitializeComponent(); 
    } 

Вот это XAML код UpdateDogWindow:

<Window x:Class="ClientApplication.UpdateDogWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:Objects="clr-namespace:SGVHS_VCDB.Database.Objects;assembly=SGVHS_VCDB.Database.Objects" 
     Title="Update Dog" 
     Height="300" 
     Width="800" 
     Background="#FFD6DBDD" 
     WindowStartupLocation="CenterOwner" 
     WindowStyle="ToolWindow" 
     Loaded="Window_Loaded"> 
    <Window.DataContext> 
     <Objects:Dog /> 
    </Window.DataContext> 
    <Canvas> 
     <Label 
      Canvas.Left="20" 
      Canvas.Top="20" 
      Content="_Dog Name:" 
      Height="36" 
      FontSize="18" 
      Name="lblDogName" /> 
     <TextBox 
      Canvas.Left="130" 
      Canvas.Top="20" 
      Height="38" 
      Width="250" 
      FontSize="18" 
      Text="{Binding Path=DogName, UpdateSourceTrigger=PropertyChanged}" 
      Name="txtUpdateDogName" /> 
     <Label 
      Canvas.Left="20" 
      Canvas.Top="80" 
      Content="_Intake Date:" 
      Height="36" 
      FontSize="18" 
      Name="lblIntakeDate" /> 
     <DatePicker 
      Canvas.Left="170" 
      Canvas.Top="81" 
      Height="38" 
      Width="175" 
      FontSize="18" 
      SelectedDate="{Binding IntakeDate}" 
      Name="dtoUpdateIntakeDate"/> 
     <Label 
      Canvas.Left="20" 
      Canvas.Top="140" 
      Height="36" 
      Content="_Unavailable Date:" 
      FontSize="18" 
      Name="lblUnavailableDate"/> 
     <DatePicker 
      Canvas.Left="170" 
      Canvas.Top="141" 
      Height="38" 
      Width="175" 
      FontSize="18" 
      SelectedDate="{Binding UnavailableDate}" 
      Name="dtoUnavailableDate"/> 
     <GroupBox 
      Canvas.Left="400" 
      Canvas.Top="22" 
      Header="Breeds" 
      Height="169" 
      Width="363" 
      FontSize="18" 
      BorderBrush="Black" 
      Name="grpBreeds"> 
      <ListBox 
       DisplayMemberPath="BreedName" 
       SelectionMode="Multiple" 
       SelectedValuePath="BreedName" 
       SelectedItem="{Binding Breed, Mode=TwoWay}" 
       Name="lstUpdateDogBreedList" /> 
     </GroupBox> 
     <CheckBox 
      Canvas.Left="20" 
      Canvas.Top="200" 
      Content="Adopted" 
      Height="32" 
      FontSize="18" 
      IsChecked="{Binding Adopted}" 
      Name="chkAdopted"/> 
     <Button 
      Canvas.Left="637" 
      Canvas.Top="205" 
      Content="Done" 
      Height="30" 
      Width="120" 
      FontSize="18" 
      Name="btnUpdateDogDone" />   
    </Canvas> 
</Window> 

Я попытался установить привязку для списка породы twoway, почему это не работает?

ответ

0

Это похоже на домашнюю работу. Ответ заключается в использовании CollectionViewSource для фильтрации. Вы можете использовать CollectionViewSource для фильтрации, сортировки и т.д.

http://weblogs.asp.net/psheriff/archive/2010/08/03/filtering-collectionview-data-in-silverlight-4.aspx

+0

Привет Davut, спасибо за вашу помощь. Извините за любую путаницу, но мое домашнее задание - создать приложение WPF. Спасибо за вашу помощь. Я думаю, что я собираюсь создать два элемента управления: один список изначально заполнен породами собак и комбинированный ящик со всеми возможными списками породы. Затем пользователь может выбрать дополнительные породы из поля со списком. Затем будет кнопка добавления, чтобы взять выбранную породу из поля со списком и добавить ее к собаке и списку. Посмотрите, работает ли это, спасибо за ваш ответ! – 2013-04-01 15:00:10

+0

Добро пожаловать. Я не заметил ни одного тега WPF. В WPF все проще, Этот парень говорит CollectionViewSource для WPF http://wpftutorial.net/DataViews.html –

+0

Это отличный ресурс, еще раз спасибо! – 2013-04-01 19:41:24

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