2010-03-02 101 views
0

說我有一個WPF XAML代碼如下WPF ListBoxItem中選擇

<Grid> 
    <Grid.ColumnDefinition> 
     <!--2 Columns are defined--> 
    </Grid.ColumnDefinition> 

    <Button x:Name="button" Grid.Column="1"/> 
    <ListBox x:Name="listBox" Grid.Column="2"/> 

    </Grid> 

現在,每次listboxitems被綁定到一個類的一個對象與名爲「狀態」構件。每當選擇一個項目時,狀態變爲「0」。如果未選中狀態變爲「1」。

現在,我的問題是,只要有任何「狀態」項分別變爲「0」或「1」,我如何禁用/啓用按鈕(在XAML中)。有沒有辦法通過DataTriggers做到這一點

感謝

回答

1

這取決於代碼的位置。如果它位於DataTemplate或ControlTemplate中,則可以使用DataTrigger。如果不是(或者即使是),你也應該能夠通過直接綁定獲得相同的效果。無論哪種情況,您都可以使用相同的基本方法。如果您創建一個接收listBox項目(收集數據對象)並根據Status值輸出布爾值的IValueConverter,您可以使用它來綁定按鈕的IsEnabled,或者檢查DataTrigger中的值並根據需要禁用。

如果您在選擇/未選中時指的是ListBox選擇,那麼您甚至不需要查看狀態值本身。如果你是一個模板中(可以使用觸發器),你也可以只檢查ListBox中是否有任何選擇的項目:

<DataTrigger Binding="{Binding ElementName=listBox, Path=SelectedItems.Count}" Value="0"> 
    <Setter TargetName="button" Property="IsEnabled" Value="False" /> 
</DataTrigger> 
+0

問題是我不能使用SelectedItems.Count屬性。 原因是,就我而言,listBox datatemplate提供了一個用於選擇/取消選擇功能的ToggleButton(哪個列表框選擇不提供)。切換按鈕綁定到「狀態」 所以,有沒有辦法通過DataTrigger從列表框的數據模板部分訪問同級元素(在這種情況下是按鈕)? 還有一個關於使用valueconverter的問題。你是否意味着將按鈕的Datacontext設置爲listbox.Items並將它與轉換器綁定在一起? – SysAdmin 2010-03-02 16:02:02

0

您可以使用Selection_Changed事件處理程序?

0

只是一定要做出相應的觸發啓用按鈕時值爲1 Ardman,你可以使用Selection_Changed事件處理程序,但我總是儘可能地在XAML中做盡可能多的事情,並保持UI代碼不在代碼背後。有時它有效,每隔一段時間它都不會。

科里斯