2009-11-06 57 views
1

嗨,我發現這個質疑WPF GUI管理使用Thread.CurrentPrincipal中

How to manipulate WPF GUI based on user roles

他的回答適用於我的項目。我正在實施相同的行爲。

但事情是屬性綁定不起作用。

我創建RoleToVisibilityConverter類,並做一些測試,調用轉換

RoleToVisibilityConverter conv = new RoleToVisibilityConverter(); 
conv.Convert((object)Thread.CurrentPrincipal,cbo_organismo.GetType(),(object)"editor",System.Globalization.CultureInfo.CurrentCulture); 

這項工作發現,然後我的資源添加到我的用戶

<UserControl.Resources> 
<fundafe:RoleToVisibilityConverter x:Key="roleConverter"/> 
</UserControl.Resources> 

,並綁定到我的按鈕控制

<Button Margin="0,0,0,0" Visibility="{Binding Source=Thread.CurrentPrincipal, Path=CurrentPrincipal, Converter={StaticResource roleConverter}, ConverterParameter=editor}" VerticalAlignment="Center" HorizontalAlignment="Left" Name="btn_Eliminar" Click="btn_Eliminar_Click" Width="Auto" Height="25" Background="Transparent" BorderBrush="Transparent"> 
         <Image Name="img_eliminar" Width="48" Source="imagenes/borrar.png" Height="19" /> 
        </Button> 

運行我的應用程序後,按鈕是仍然可見。

,如果我硬編碼Visibility屬性按鈕被隱藏

btn_Eliminar.Visibility=(Visibility)conv.Convert((object)Thread.CurrentPrincipal,cbo_organismo.GetType(),(object)"editor",System.Globalization.CultureInfo.CurrentCulture) 

什麼建議嗎?

注: I'cant使用最後一種方法,因爲在我的真實的情景按鈕是一個ListView一個DataTemplate的一部分,即使捕捉使用TreeHelper按鈕ListView控件僅將更改應用於該虛擬化的第一項

回答

2

假設這是您的代碼逐字,它看起來像您的Button上的綁定是錯誤的。你有這樣的:

{Binding Source=Thread.CurrentPrincipal, Path=CurrentPrincipal, Converter={StaticResource roleConverter}, ConverterParameter=editor} 

注意,你必然要Thread.CurrentPrincipal作爲源,但然後設置PathCurrentPrincipal爲好。這相當於Thread.CurrentPrincipal.CurrentPrincipal顯然無法綁定。

老實說,我很確定你也需要圍繞Thread.CurrentPrincipal{x:Static}。此外,這意味着您需要聲明System.Threading的名稱空間。假設你定義命名空間爲「systhreading」所以最終的結合將是:

{Binding Source={x:Static systhreading:Thread.CurrentPrincipal}, Converter={StaticResource roleConverter}, ConverterParameter=editor} 
+0

嗨,我是新使用WPF,所以我沒有得到這一切結合的東西,感謝您的幫助。 我添加了這個引用xmlns:systhreading =「clr-namespace:System.Threading; assembly = System」 但我得到一個錯誤:類型線程沒有找到,任何想法我做錯了 – germandb 2009-11-07 18:39:05

+0

Thread類實際上在mscorlib程序集中。所以你的命名空間聲明應該是:xmlns:systhreading =「clr-namespace:System.Threading; assembly = mscorlib」。 – 2009-11-07 19:53:36

+0

多數民衆贊成在交易,謝謝;) – germandb 2009-11-08 11:36:27