我有两个组合框,当前已绑定到用户模型。第一个组合框应该在单击组合框之前显示当前的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");
}
}
我该如何解决此问题?我进行了搜索,并尝试了不同的博客,但它对我不起作用。
答案 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并将其绑定。