簡體   English   中英

綁定到ItemsControl的Items屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM