私はWPFアプリケーションで作業しています。ユーザーがいて、私のケースではSUPERADMINとADMINのロール1つのユーザーが1つ以上のロールを持つことができます。これは、自分のフォームで1つ以上のチェックボックスを選択できることを意味します。私はdinamicallyチェックボックスを生成:DataGridで動的に作成されたチェックボックスによって表されるユーザーのロールをマークする方法が変更されました
をそれはは下の方法を適用した後に次のようになりますので、私は向きが垂直であるスタックパネルにチェックボックスを追加している:今、私は疑問に思って
private void LoadRolesToStackPanel()
{
try
{
var roles = RolesController.Instance.SelectAll();
if (roles.Count > 0)
{
foreach (Role r in roles)
{
CheckBox cb = new CheckBox();
//cb.Name = r.RoleId.ToString();
cb.Content = r.Title.ToString();
cb.FontSize = 15;
stackRole.Children.Add(cb);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
私は別のユーザーを選択しているときに、各ユーザーの適切なチェックボックスをどのように表示/マーク/チェックすることができますか(ユーザーはDataGrid dtgUsersに含まれているので、ユーザーからユーザーに選択を変更するときにdtgUsers_SelectionChangedイベントを発生させます。それをやっている私はまたshにする必要がある適切なチェックボックスをロールの表現として使用し、選択されたユーザがその(選択された)ロールを有する表現としてチェックされなければならない。
今私はこのようにしましたが、それは非常に悪いアプローチだと思いますので、これを行うための新しい、あるいはより良い解決策を求めています。
private void dtgUsers_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (dtgUsers.SelectedItem != null)
{
stackRole.Children.Clear();
User user = (User)(dtgUsers.SelectedItem);
if (user != null)
{
//Get all roles from database for selected user
user.Roles = RolesController.SelectByUserId(user.Id);
if (user.Roles.Count > 0)
{
//This is bad approach I took Title of each user's role to compare it with all existing roles
var roleNames = user.Roles.Select(r => r.Title);
var allRoles = RolesController.SelectAll();
if (allRoles.Count > 0)
{
foreach (Role r in allRoles)
{
CheckBox cb = new CheckBox();
cb.Content = r.Title.ToString();
cb.FontSize = 15;
cb.Tag = r;
stackRole.Children.Add(cb);
if (roleNames.Contains(cb.Content)) //Here I'm bassically as I am creating checkbox immediatelly checking/marking it if it exist in user's roles
cb.IsChecked = true;
}
}
}
}
}
私はこの問題を解決する方法を提案任意の種類が/それを改善するには、非常に歓迎です! みんなありがとう 乾杯
私はすぐに実装しようとしますが、あなたのコードを見て、どのように選択された役割をループすることができないのか分かりませんでしたか?私は前の回答では、コードのこの作品を見た:foreachの(_viewModel.Roles中のvar役割) { 場合(role.IsSelected) { // ...} }そして、これはすべての役割throughtループを意味しますが何かをします役割が選択されている場合のみ –
はい、正確です。 IsCelectedプロパティをIsSelectedプロパティにバインドしている場合、CheckBoxをチェックすると、ロールのIsSelectedプロパティがtrueに設定されます。 – mm8