0

わかりました。私がこれを正しく行っているのか、それとも難しい方法で行っているのかを見てみましょう。

初め。私は整数(0-255)のアカウントレベルを持っています。各バイトは特定の機能を有効にするように設定されています。特定のバイトの疑似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についても読んでいますが、現在のメソッドを使用するのが適切なメソッドですか、それともXAMLおよびCSファイルでIValueConvertsを使用する必要がありますか?

IValueConvertesを使用しようとしたときに、オブジェクトが複数のVisibilities(または必要に応じて他の変数)を返すようにする方法がわからなかったため、現在使用しているメソッドは機能しています。

4

1 に答える 1

0

あなたが間違っていることのセットがあります...

  1. あなたLevel.AllowXはプロパティではなくフィールドです。WPF は、プロパティがバインドに参加することを想定しています。
  2. それらをプロパティに変換した後、AllowXセッターは PropertyChangedNotifications を発生させる必要があります (のようにProgramVar.UserLevel)。
  3. 末尾NotifyPropertyChanged("ActiveUser ")にスペースがあります。である必要がありますNotifyPropertyChanged("ActiveUser")
  4. すでにVisibility列挙値を設定しているので、バインディングに値コンバーターが必要だとは思いません。
  5. 最終的に 255 個AllowLevelのフィールドを作成するのは悪い考えです。ItemsControls方法を確認しItemsSourceList<Visibility>値を操作してください!
于 2012-04-20T05:19:13.370 に答える