Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Не устанавливается SelectedItem в ComboBox / 11 сообщений из 11, страница 1 из 1
04.07.2011, 17:56
    #37335907
Balda_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не устанавливается SelectedItem в ComboBox
silverlight 4. Есть страничка с DataForm.
Загрузка данных реализована через WCF сервис.
CurrentItem для DataForm - экземпляр класса Employee:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class Employee
{
    public int ID;
    public string Name;
    public Country Country;
}

public class Country
{
   public int CountryID;
   public string CountryName
}

В DataForm одим из полей является ComboBox:
Код: plaintext
1.
2.
3.
<toolkit:DataField Name="cbCountry" Label="Country:">
           <ComboBox DisplayMemberPath="CountryName" SelectedItem="{Binding Path=Country, Mode=TwoWay}" />
</toolkit:DataField>
Заполнение ComboBox
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
private void myDataForm_ContentLoaded(object sender, DataFormContentLoadEventArgs e)
        {
            var proxy = new MyServiceClient();
            proxy.GetCountryCompleted += new System.EventHandler<GetCountryCompletedEventArgs>(proxy_GetCountryCompleted);
            proxy.GetCountryAsync();
        }

        void proxy_GetCountryCompleted(object sender, GetPositionCompletedEventArgs e)
        {
            ComboBox cbCountry = (ComboBox)((DataField)myDataForm.FindNameInContent("cbCountry")).Content;
            cbCountry.ItemsSource = e.Result;          
        }

При отображении DataForm данные в ComboBox подтягиваются, но не устанавливается SelectedItem.

В чем ошибка? и как это исправить?
...
Рейтинг: 0 / 0
04.07.2011, 18:27
    #37335971
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не устанавливается SelectedItem в ComboBox
вероятно имеем два экземпляра класса Country с одинаковым CountryID? и никто не знает что они "равны"
наверное нужно сообщить (байндингу) что сравнивать следует по CountryID, либо сообщить "всем" с помощью public override bool Equals(object obj) для класса Country (для справочников предпочитаю последнее)
...
Рейтинг: 0 / 0
04.07.2011, 18:32
    #37335977
Balda_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не устанавливается SelectedItem в ComboBox
LR,
а можно простой пример для наглядности?
...
Рейтинг: 0 / 0
04.07.2011, 18:50
    #37335995
maratoss
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не устанавливается SelectedItem в ComboBox
Попробуйте установить свой-ва
SelectedValue и SelectedValuePath
...
Рейтинг: 0 / 0
04.07.2011, 18:59
    #37336008
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не устанавливается SelectedItem в ComboBox
maratossSelectedValue и SelectedValuePath
угу, либо "более глобальный" вариант, добавить в класс Country примерно такое:
Код: plaintext
1.
2.
3.
4.
public override bool Equals(object obj)
{
    if (!(obj is Country)) return false;
    return (CountryID==((Country)obj).CountryID);
}
...
Рейтинг: 0 / 0
04.07.2011, 19:43
    #37336075
LR
LR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не устанавливается SelectedItem в ComboBox
Balda_1а можно простой пример для наглядности?
в аттаче, и еще - не забывайте что привязка(binding) работает только со свойствами
...
Рейтинг: 0 / 0
05.07.2011, 12:00
    #37336928
Balda_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не устанавливается SelectedItem в ComboBox
Больщое спасибо за пример ))

Заработало, если программно указать SelectedValue:
Код: plaintext
1.
2.
3.
4.
5.
6.
void proxy_GetCountryCompleted(object sender, GetPositionCompletedEventArgs e)
        {
            ComboBox cbCountry = (ComboBox)((DataField)myDataForm.FindNameInContent("cbCountry")).Content;
            cbCountry.ItemsSource = e.Result;       
            cbCountry.SelectedValue = ((Employee)myDataForm.CurrentItem).Country.CountryID;
        }
XAML:
Код: plaintext
1.
2.
3.
<toolkit:DataField Name="cbCountry" Label="Country:">
           <ComboBox DisplayMemberPath="CountryName" SelectedValuePath="CountryID" SelectedItem="{Binding Path=Country, Mode=TwoWay}" />
</toolkit:DataField>
...
Рейтинг: 0 / 0
06.07.2011, 12:17
    #37338913
Balda_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не устанавливается SelectedItem в ComboBox
Ещё один вопрос по ComboBox.
Допустим нужно вывести список сотрудников в грид WPF. Страна выбирается из ComboBox'a. Все данные подгружаются через WCF сервис.
Вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public partial class MainWindow : Window
    {
        public List<Country> CountrySource { get; set; }

        public MainWindow()
        {
            InitializeComponent();

            var proxy = new NHEmployeeReference.NHEmployeeServiceClient();
            CountrySource = proxy.GetCountry().ToList();
            myDataGrid.ItemsSource = proxy.GetAllEmployees().ToList();
        }      
Вот XAML:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<DataGridTemplateColumn Header="Country">
      <DataGridTemplateColumn.CellEditingTemplate>
           <DataTemplate>
                <ComboBox ItemsSource="{Binding Path=CountrySource, 
                                                    RelativeSource={RelativeSource FindAncestor, 
                                                    AncestorType={x:Type Window}}}" 
                                DisplayMemberPath="CountryName" 
                                SelectedValuePath="CountryID"
                                SelectedValue="{Binding Country.CountryID}"
                                SelectedItem="{Binding Path=Country, Mode=TwoWay}"/>
          </DataTemplate>
      </DataGridTemplateColumn.CellEditingTemplate>
      <DataGridTemplateColumn.CellTemplate>
          <DataTemplate>
                <TextBlock Text="{Binding Path=Country.CountryName}" />
          </DataTemplate>
       </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Т.е. когда ячейка "Country" в режиме редактирования - отображается ComboBox со списком стран, в режиме просмотра отображается название выбранной страны.

Проблема в том, что при изменении страны из ComboBox значение в TextBlock не обновляется. Как это исправить?
...
Рейтинг: 0 / 0
06.07.2011, 12:31
    #37338958
Balda_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не устанавливается SelectedItem в ComboBox
Вопрос снят: нужно установить UpdateSourceTrigger=PropertyChanged для SelectedItem.
...
Рейтинг: 0 / 0
21.12.2011, 13:40
    #37586792
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не устанавливается SelectedItem в ComboBox
LRвероятно имеем два экземпляра класса Country с одинаковым CountryID? и никто не знает что они "равны"
наверное нужно сообщить (байндингу) что сравнивать следует по CountryID, либо сообщить "всем" с помощью public override bool Equals(object obj) для класса Country (для справочников предпочитаю последнее)
С перегрузкой функций Equals и GetHashCode работает. А теперь скажите, пожалуйста, как сообщить байндингу, что результат следует сравнивать по конкретному параметру? В аттаче выше я только перегрузку заметил.
...
Рейтинг: 0 / 0
21.12.2011, 13:44
    #37586803
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не устанавливается SelectedItem в ComboBox
user7320LRвероятно имеем два экземпляра класса Country с одинаковым CountryID? и никто не знает что они "равны"
наверное нужно сообщить (байндингу) что сравнивать следует по CountryID, либо сообщить "всем" с помощью public override bool Equals(object obj) для класса Country (для справочников предпочитаю последнее)
С перегрузкой функций Equals и GetHashCode работает. А теперь скажите, пожалуйста, как сообщить байндингу, что результат следует сравнивать по конкретному параметру? В аттаче выше я только перегрузку заметил.
Сделал подобное
авторSelectedItem="{Binding Path=Country
- не сработало - ничего не отобразилось в качестве выбранного элемента.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Не устанавливается SelectedItem в ComboBox / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]