组合框显示错误“绑定表达式路径错误”

时间:2018-09-06 03:04:31

标签: c# wpf combobox

我有两个组合框,当前已绑定到用户模型。第一个组合框应该在单击组合框之前显示当前的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;
    }
}

上面的代码是从link引用的:

这是我的用户模型代码:

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 :(得分:0)

问题在于组合框的DataContext是User,但是您需要从DataGrid的datacontext设置ItemsSource。为此,您需要使用以下语法:

 <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并将其绑定。