Привязка к флажкам в WPF - PullRequest
0 голосов
/ 25 мая 2011

с использованием Entity Framework (C #) У меня есть класс User, который имеет ONE:MANY сопоставление с классом UserRight (просто у пользователя есть набор прав).Каждое право обозначается строкой.И теперь, поскольку максимальное количество возможных прав конечно (<10), я хотел бы иметь 10 <code>CheckBoxes и редактировать подмножество прав для данного пользователя вручную.

Какой хороший способсделать это?

Джеймс

1 Ответ

2 голосов
/ 25 мая 2011

Создайте класс RightViewModel, содержащий права пользователя:

public class RightViewModel : INotifyPropertyChanged
{
    private string _name;
    public string Name
    {
        get { return _name; }
        set
        {
            _name = value;
            Change("Name");
        }
    }

    private bool _hasRight;
    public bool HasRight
    {
        get { return _hasRight; }
        set
        {
            _hasRight = value;
            Change("HasRight");
        }
    }

    public void Change(string strPropertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(strPropertyName));
    }
    public event PropertyChangedEventHandler PropertyChanged;
}

Создайте аналогичный класс для вашего пользователя, содержащий член Rights типа ObservableCollection<RightViewModel>.

Inвы XAML, используйте ItemsControl:

<ItemsControl ItemsSource="{Binding Rights}"
    ItemTemplate="{StaticResource RightTemplate}"/>

и определение шаблона:

<DataTemplate x:Key="RightTemplate">
    <CheckBox Content="{Binding Name}" IsChecked="{Binding HasRight, Mode=TwoWay}"/>
</DataTemplate>

Mode=TwoWay делает привязку обновлять ваш RightViewModel экземпляр.

Определите ItemsControl ItemsPanel, если вам нужно отображать свои флажки с другим макетом.

Наконец, установите вашего пользователя в качестве DataContext вашего контейнера.

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