[英]Binding to the Items properties of an ItemsControl
我正在尋找一種方法,例如將Button Text或IsEnabled屬性綁定到ItemsControl中的IsChecked屬性,這是我的簡化源代碼:
<StackPanel>
<ItemsControl ItemsSource="{Binding Tasks}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="10,0,10,0" Text="{Binding Name}"/>
<CheckBox IsChecked="{Binding InProgress}"/>
<CheckBox IsChecked="{Binding Done}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Button/>
</StackPanel>
我想(例如)是否選中所有“完成”復選框,將“按鈕文本”設置為某個值或啟用它。 我以為可以使用DataTriggers在Xaml中使用數據綁定來執行此操作,但我不知道該怎么做。 有人可以給我完整的xaml解決方案嗎?
新答案
抱歉,我誤解了這個問題。 我將從您的DataContext
中公開另一個屬性,如果是否檢查了集合中的所有項目,則僅返回true / false,然后使用DataTrigger
將Button的Text
/ IsEnabled
該屬性
<Style TargetType="{x:Type Button}">
<Setter Property="IsEnabled" Value="False" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsAllChecked}" Value="True">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
DataTriggers只需進行綁定,然后檢查結果是否等於某個值。
<Style TargetType="{x:Type TextBox}"> <Setter Property="IsEnabled" Value="False" /> <Style.Triggers> <DataTrigger Binding="{Binding Done}" Value="True"> <Setter Property="IsEnabled" Value="True" /> </DataTrigger> </Style.Triggers> </Style>
如果需要測試多個條件,則需要一個MultiDataTrigger
<Style TargetType="{x:Type TextBox}"> <Setter Property="IsEnabled" Value="False" /> <Style.Triggers> <MultiDataTrigger> <MultiDataTrigger.Conditions> <Condition Binding="{Binding Path=InProgress}" Value="True" /> <Condition Binding="{Binding Path=Done}" Value="True" /> </MultiDataTrigger.Conditions> <Setter Property="IsEnabled" Value="True" /> </MultiDataTrigger> </Style.Triggers> </Style>
請注意,setter的默認值是樣式的一部分。 這很重要,因為如果在<TextBox>
上設置默認值,則它的優先級高於觸發值,因此觸發值無法更改當前值。
您可以更改此行...
<Button/>
對此
<Button Content={Binding ButtonContent}/>
並在選中“完成”復選框時在ViewModel中設置“ ButtonContent”屬性。
通常,最好的方法是將要應用於按鈕的狀態綜合到ViewModel的屬性中。
在這種情況下,WPFy方法是讓ViewModel公開實現按鈕操作的命令。 該命令可以依次響應您數據中的更改以發出信號,以指示是否可用,從而自動禁用/啟用您的按鈕。 另外一個好處是,您可以輕松實現菜單,例如,一旦獲得命令,即可正確啟用/禁用菜單。
自從我有機會接觸WPF以來已有很長時間了,所以我手邊沒有任何真正有用的鏈接,但是如果您是我,我將學習WPF中的命令,它們是MVVM體系結構中非常重要的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.