0
好吧,讓我看看我是否正確地做這件事,或者我是否這麼做是困難的。複雜的綁定將INT轉換爲多個WPF可見性
首先。 我有一個帳戶級別是一個整數(0-255)每個字節設置爲啓用給定的功能。 我在能見度設置爲給定的字節 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肥皂在用戶簽訂的電流接口(工作)
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當前的方法,我沒有看到如何讓一個對象返回多個典型能見度(或其他varables如果需要的話)
如果你的實現工作,我想使用IValueConverters不會是一個好主意,因爲它會讓你的事情變得複雜。你可以堅持這個實現。我寧願將可見性的List或ObservableCollection用作類型,並使用它像visibilityCollection [index]。 IValueConverters通常用於控件或代碼段的可見性取決於另一個控件(如單選按鈕或複選框)的值,或者可能是其他一些簡單的邏輯。 – 2012-04-20 06:47:05
你很難用你的邏輯來實現這一點,因爲ActiveUSer AccountLevel也被納入圖片中,並且你需要在你的ViewModel中編寫轉換器,而不是你的ViewModel邏輯在可見性轉換中使用的單獨轉換器類。 – 2012-04-20 06:47:41