В выпадающем списке отображается ошибка «Ошибка пути выражения» - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть два списка, которые в настоящее время привязаны к пользовательской модели. Первый комбинированный список должен показывать текущее значение userRole до нажатия на комбинированный список. Другой комбинированный список должен показывать userStatus 1 или 0. Теперь второй комбинированный список не отображает никаких значений. Однако первый комбинированный список отображает значение только после его щелчка.

Вот код xaml:

<StackPanel Orientation="Horizontal">
<TextBlock FontSize="12" Text="User Role: " VerticalAlignment="Center" />
<ComboBox x:Name="cbUserRole" FlowDirection="LeftToRight" FontSize="16" Foreground="MidnightBlue" HorizontalAlignment="Stretch" VerticalAlignment="Center" Loaded="cbUserRole_Loaded" SelectedItem="{Binding UserRole, Mode=TwoWay" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock FontSize="12" Text="User Status: " VerticalAlignment="Center" />
<ComboBox x:Name="cbUserStatus" FlowDirection="LeftToRight" FontSize="16" Foreground="MidnightBlue" HorizontalAlignment="Stretch" VerticalAlignment="Center" SelectedIndex="{Binding UserStatus, Converter={StaticResource boolToIndexConverter}}" />
</StackPanel>

Вот мой код конвертера:

 public class BoolToIndexConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ((bool)value == true) ? 0 : 1;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ((int)value == 0) ? true : false;
    }
}

Указанный выше код ссылается по этой ссылке :

Вот мой код модели пользователя:

private string userrole;


    public string UserRole
    {
        get { return userrole; }
        set
        {
            userrole = value;
            OnPropertyChanged("UserRole");
        }
    }

private bool userstatus;


    public bool UserStatus
    {
        get { return userstatus; }
        set
        {
            userstatus = value;
            OnPropertyChanged("UserStatus");
        }
    }

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

1 Ответ

0 голосов
/ 06 сентября 2018

Проблема в том, что DataContext вашего комбинированного списка имеет значение User, но вам нужно установить ItemsSource из datacontext DataGrid. Для этого вам нужно использовать следующий синтаксис:

 <ComboBox 
ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}}, Path=DataContext.Users}" 
                                          x:Name="cbUserRole" FlowDirection="LeftToRight" FontSize="16" Foreground="MidnightBlue" HorizontalAlignment="Stretch" VerticalAlignment="Center" 
                                          SelectedItem="{Binding UserRole,Mode=TwoWay}"></ComboBox>

И удалить загруженный обработчик.

Вы также можете использовать <DataGrid DataContext="{StaticResource uvm}" вместо кода, находящегося за кодом:

var userList = new UserViewModel().Users;
userDataGrid.ItemsSource = userList;

У вас нет ItemsSource для вашего комбинированного списка статуса. Я думаю, что вы должны добавить коллекцию состояний в UserViewModel и связать ее, как в примере выше.

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