2013-07-13 85 views
0

目前,我有以下datatrigger:在DataGridWPF Datatrigger按鈕上的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> 

我有兩個問題。

目前,上面的觸發器禁用了兩個按鈕,當我只希望它禁用刪除按鈕。將設置者的目標名稱設置爲刪除按鈕不起作用。我可以使觸發器成爲特定的按鈕嗎?

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

回答

2

,如果你想將其分配給相應的按鈕,你應該使用Style與關鍵:

<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> 

而不是檢查HasItems和寫另一觸發要檢查網格是否已選擇項目,可以編寫觸發器並檢查SelectedItem是否爲空。 SelectedItem屬性爲您提供信息,如果網格有項目,並且用戶選擇其中一個。

+0

對'SelectedItem'的良好調用是'{x:Null}'觸發器 - 沒有想到這一點。 –

0

如果兩個Button份額相同Style,因此具有相同的Trigger,然後他們都去相同的情況下被禁止(在這種情況下,當DataGrid有0項)。

爲了在不同情況下禁用刪除Button,您需要創建一個不同的Style與不同的Trigger並將該樣式應用於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"/> 

至於觸發啓用刪除按鈕,只有當一個項目被選中,如果你不希望使用SelectedItems屬性的CountDataGrid,那麼你就需要使用Converter來確定網格的選擇狀態 - DataGrid上沒有其他DependencyProperties,我知道這會爲您提供信息離子。

此外,我不確定上下文沒有更多的代碼,但不相信你想在這種情況下DataTrigger - 你應該罰款與標準Trigger