簡體   English   中英

WPF Datatrigger on button基於datagrid

[英]WPF Datatrigger on button based on datagrid

目前,我有以下數據觸發器:

<Style TargetType="Button">
    <Style.Triggers>
        <DataTrigger Binding="{Binding ElementName=ScheduleDataGrid, Path=HasItems}"
                        Value="false">
            <Setter Property="Button.IsEnabled" Value="false"></Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>

我有兩個按鈕,可以在數據網格中添加/刪除一行

<Button Name="BtnAddPoint" Content="Add" Width="70" Margin="10 0 10 0" Click="BtnAddSchedule_Click"></Button>
<Button Name="BtnDeletePoint" Content="Delete" Width="70" Click="BtnDeleteSchedule_Click"></Button>

我有兩個問題。

目前,當我只想要禁用刪除按鈕時,上面的觸發器會禁用這兩個按鈕。 將setter的targetname設置為delete按鈕不起作用。 我可以將觸發器定位到特定按鈕嗎?

此外,我希望刪除按鈕僅在選擇網格項時啟用,而不是檢查項目計數。 這可能嗎?

如果要將Style分配給適當的按鈕,則應使用Style with key:

<Style x:Key="DeleteButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="Button.IsEnabled" Value="True" />
    <Style.Triggers>              
        <DataTrigger Binding="{Binding ElementName=ScheduleDataGrid, Path=SelectedItem}" Value="{x:Null}">
            <Setter Property="Button.IsEnabled" Value="False" />
        </DataTrigger>            
    </Style.Triggers>
</Style>

BtnDeletePoint按鈕中,您應該添加樣式:

<Button Name="BtnAddPoint" Content="Add" Width="70" Margin="10 0 10 0" Click="BtnAddSchedule_Click"></Button>
<Button Name="BtnDeletePoint" Content="Delete" Width="70" Click="BtnDeleteSchedule_Click" Style="{StaticResource DeleteButtonStyle}"></Button>

您可以編寫觸發器並檢查SelectedItem是否為空,而不是檢查HasItems並編寫另一個觸發器來檢查網格是否已選擇項目。 如果網格包含項目,並且用戶選擇了其中一項,則SelectedItem屬性會為您提供信息。

如果兩個Button共享相同的Style並因此具有相同的Trigger ,那么它們將在相同的情況下被禁用(在這種情況下,當DataGrid有0個項目時)。

為了在不同情況下禁用“刪除” Button ,您需要使用不同的Trigger創建單獨的Style ,並將該樣式應用於BtnDeletePoint。 由於我沒有看到你在按鈕的聲明中設置Style ,我猜測觸發器屬於Button的隱式樣式,所以你需要為新樣式分配一個x:Key ,這樣你就可以分配它到你的刪除按鈕:

<Style x:Key="DeleteButtonStyle" TargetType="Button">
    <!-- Setters -->
    <!-- Triggers -->
</Style>

<Button Name="BtnDeletePoint" Style="{DynamicResource DeleteButtonStyle}" Content="Delete" Width="70" Click="BtnDeleteSchedule_Click"/>

至於在僅選擇單個項目時啟用刪除按鈕的觸發器,如果​​您不想在DataGrid上使用SelectedItems屬性的Count ,則需要使用Converter來確定選擇狀態。 grid - 我知道DataGrid上沒有其他DependencyProperties可以為你提供這些信息。

另外,如果沒有更多的代碼,我不確定上下文,但是在這種情況下你不相信你想要一個DataTrigger - 你應該沒有標准的Trigger

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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