Связывание данных в Combobox - PullRequest
0 голосов
/ 26 августа 2010

Я связал первичный ключ таблицы базы данных с selectedIndex комбинированного списка.проблема возникает, когда первичный ключ начинается с 1, а selectedIndex принимает от 0. Я имею в виду, когда я хочу увидеть элемент с ID = 1 в базе данных, поскольку он указан как первый элемент в выпадающем списке с индексом 0, он отображает второй элементв списке, который считается с ID = 1 в выпадающем списке.Кто-нибудь может мне помочь в решении этой проблемы?

Заранее спасибо.вот мой комбобокс:

<ComboBox SelectedIndex="{Binding SC.User1.UserID, UpdateSourceTrigger=PropertyChanged }"         
          IsSynchronizedWithCurrentItem="True"
          x:Name="proxyResponsibleUserCmb" ItemsSource="{Binding Users, Mode=OneTime}"
          SelectedItem="{Binding SC.User1.FullName, ValidatesOnDataErrors=True,                   
                         UpdateSourceTrigger=PropertyChanged}"
          Validation.ErrorTemplate="{x:Null}"  
          Height="23" 
          VerticalAlignment="Top" 
          HorizontalAlignment="Left" 
          Width="118" 
          Margin="184,3,0,0" 
          Grid.Row="0" 
          Grid.Column="1"/>

Ответы [ 3 ]

4 голосов
/ 26 августа 2010

Как насчет использования SelectedValuePath и DisplayMemberPath в ComboBox и установки элемента по умолчанию с SelectedValue вместо SelectedItem?

<ComboBox x:Name="proxyResponsibleUserCmb" 
    SelectedValuePath="{Binding UserID}" 
    DisplayMemberPath="{Binding FullName}"
    SelectedValue="{Binding SC.User1.UserId, ValidatesOnDataErrors=True,  UpdateSourceTrigger=PropertyChanged}" 
    ItemsSource="{Binding Users, Mode=OneTime}" />
0 голосов
/ 26 августа 2010

Быстрый обходной путь с помощью ValueConverter:

Создайте ValueConverter в своем коде:

// of course use your own namespace...
namespace MyNameSpace
{
public class IndexConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if(!(value is int)) // Add the breakpoint here!!
            throw new Exception();
        int newindex = ((int)value - 1;
        return newindex;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException("This method should never be called");
    }
}
}

Затем сделайте его известным в своем XAML:

//(declare a namespace in your window tag:)
xmlns:myNamespace="clr-namespace:MyNameSpace"

// add:
<Window.Resources>
    <ResourceDictionary>
        <myNamespace:IndexConverter x:Key="indexConverter" />
    </ResourceDictionary>
</Window.Resources>

Тогдаизмените привязку:

<ComboBox SelectedIndex="{Binding SC.User1.UserID, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource indexConverter}}" ... />

Это должно сработать.По крайней мере, вы можете отладить его, вставив точку останова в IndexConverter.

0 голосов
/ 26 августа 2010

Помогает ли установка свойства IsSynchronizedWithCurrentItem (в вашем XAML) на True?

РЕДАКТИРОВАТЬ Может быть, эта ссылка поможет:

http://social.msdn.microsoft.com/Forums/en/wpf/thread/b4e84ea2-9597-4af1-8d3c-835b972e3d73

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...