Хорошо, давайте посмотрим, выполняю ли я это правильно, или я делаю это с трудом.Сложная привязка, преобразующая INT в многократную видимость WPF
Первый. У меня есть уровень учетной записи, который является целым числом (0-255), каждый байт установлен для включения данных функций. Я работаю по настройке видимости в заданном Byte Psudo XML кодекс
<Button Grid.Column="0" Grid.Row="0" Name="Function" Content="Function 1" Visibility="{Binding UserLevel.Allow1 , UpdateSourceTrigger=PropertyChanged}"/>
<Button Grid.Column="0" Grid.Row="1" Name="Function" Content="Function 2" Visibility="{Binding UserLevel.Allow2 , UpdateSourceTrigger=PropertyChanged}"/>
<Button Grid.Column="0" Grid.Row="2" Name="Function" Content="Function 3" Visibility="{Binding UserLevel.Allow3 , UpdateSourceTrigger=PropertyChanged}"/>
<Button Grid.Column="0" Grid.Row="3" Name="Function" Content="Function 4" Visibility="{Binding UserLevel.Allow4 , UpdateSourceTrigger=PropertyChanged}"/>
<Button Grid.Column="0" Grid.Row="4" Name="Function" Content="Function 5" Visibility="{Binding UserLevel.Allow5 , UpdateSourceTrigger=PropertyChanged}"/>
<Button Grid.Column="0" Grid.Row="5" Name="Function" Content="Function 6" Visibility="{Binding UserLevel.Allow6 , UpdateSourceTrigger=PropertyChanged}"/>
<Button Grid.Column="0" Grid.Row="6" Name="Function" Content="Function 7" Visibility="{Binding UserLevel.Allow7 , UpdateSourceTrigger=PropertyChanged}"/>
<Button Grid.Column="0" Grid.Row="7" Name="Function" Content="Function 8" Visibility="{Binding UserLevel.Allow8 , UpdateSourceTrigger=PropertyChanged}"/>
Когда знаки пользователя в классе ProgramVar.ActiveUser получает вытащили и установить на текущий подписанном в пользователе с PHP Soap Интерфейс (рабочий)
class ProgramVar : INotifyPropertyChanged
{
private User _ActiveUser;
private Level _UserLevel;
public User ActiveUser { get { return this._ActiveUser; } set { _ActiveUser= value; UpdateLevel(); NotifyPropertyChanged("ActiveUser "); } }
public Level UserLevel { get { return this._UserLevel; } set { _UserLevel= value; NotifyPropertyChanged("UserLevel"); } }
private void UpdateLevel()
{
UserLevel.Allow1 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 1) UserLevel.Allow1 = Visibility.Visible;
UserLevel.Allow2 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 2) UserLevel.Allow2 = Visibility.Visible;
UserLevel.Allow3 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 4) UserLevel.Allow3 = Visibility.Visible;
UserLevel.Allow4 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 8) UserLevel.Allow4 = Visibility.Visible;
UserLevel.Allow5 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 16) UserLevel.Allow5 = Visibility.Visible;
UserLevel.Allow6 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 32) UserLevel.Allow6 = Visibility.Visible;
UserLevel.Allow7 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 64) UserLevel.Allow7 = Visibility.Visible;
UserLevel.Allow8 = Visibility.Collapsed; if(ActiveUser.AccountLevel & 128) UserLevel.Allow8 = Visibility.Visible;
NotifyPropertyChanged("UserLevel");
}
}
class User
{
string UserName;
string FirstName;
int AccountLevel;
}
class Level
{
Visibility Allow1 = Visibility.Visible;
Visibility Allow2 = Visibility.Visible;
Visibility Allow3 = Visibility.Visible;
Visibility Allow4 = Visibility.Visible;
Visibility Allow5 = Visibility.Visible;
Visibility Allow6 = Visibility.Visible;
Visibility Allow7 = Visibility.Visible;
Visibility Allow8 = Visibility.Visible;
}
Теперь я также читал о IValueConverters, бы использовать текущий метод быть правильный метод, или я должен использовать IValueConverts в XAML & СК Files?
Текущий метод я использую работаю, а когда я пытался использовать IValueConvertes, я не видел, как получить объект для возврата несколько обзорности (или других varables при необходимости)
Если ваша реализация работает, я предполагаю, что использование IValueConverters не будет отличной идеей, так как это осложнит вам жизнь. Вы можете придерживаться этой реализации. Я бы скорее использовал List или ObservableCollection of Visibility как тип и использовал его как visibilityCollection [index]. IValueConverters обычно используются, когда видимость элемента управления или раздела кода зависит от значения другого элемента управления, такого как переключатель или флажок, или может быть другой простой логикой. –
Вам будет сложно реализовать это с вашей логикой, так как ActiveUSer AccountLevel также будет помещен в изображение, и вам нужно будет написать конвертер в вашем ViewModel, а не отдельный класс конвертера, поскольку ваша логика ViewModel входит в преобразование видимости. –