2017-06-12 53 views
0

我想禁用從xaml的按鈕,如果在datagrid中沒有選中,但它不工作,我不明白爲什麼。按鈕禁用不工作wpf

這裏是我的XAML代碼:

<DataGrid IsReadOnly="True" x:Name="datagrid" ItemsSource=" 
    {Binding Path=Notes, UpdateSourceTrigger=PropertyChanged}" 
     IsSynchronizedWithCurrentItem="True" HorizontalAlignment="Left" 
    Margin="0,39,0,0" VerticalAlignment="Top" Height="175" Width="300" AutoGenerateColumns="False"> 
     <DataGrid.ColumnHeaderStyle> 
      <Style TargetType="DataGridColumnHeader"> 
       <Setter Property="FontSize" Value="14"/> 
      </Style> 
     </DataGrid.ColumnHeaderStyle> 
     <DataGrid.Columns> 
      <DataGridTextColumn Header="Title" Binding="{Binding Title}"/> 
      <DataGridTextColumn Header="Content" Binding="{Binding Content}"/> 
     </DataGrid.Columns> 
    </DataGrid> 
    <Button Content="Edit" HorizontalAlignment="Left" Margin="218,9,0,0" VerticalAlignment="Top" Width="70" Height="25" 
      Command="{Binding editCommand}"> 
     <Button.Style> 
      <Style TargetType="Button"> 
       <Setter Property="IsEnabled" Value="True" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding ElementName=datagrid, Path=SelectedItem}" Value="{x:Null}"> 
         <Setter Property="IsEnabled" Value="False" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Button.Style> 
     <Button.CommandParameter> 
      <MultiBinding Converter="{StaticResource multiCloner}"> 
       <Binding Path="SelectedItem" ElementName="datagrid"/> 
      </MultiBinding> 
     </Button.CommandParameter> 
    </Button> 

如果有人可以幫助我將不勝感激。

編輯:我使用MVVM,所以沒有代碼隱藏。 顯然,datagrid中的第一項始終是自動選中的,這就是爲什麼按鈕始終處於啓用狀態,但我仍然不知道我做了什麼,從而始終選擇了第一項。

+0

你能更具體地瞭解它是如何「不工作」?你確認dataGrid.SelectedItem實際上是空的嗎? –

+0

好吧,我只是檢查它,即使我沒有點擊任何東西,第一個項目自動總是選擇一個。有沒有辦法改變它? – xena12

回答

-2

而不是具有所有這些設置屬性,請嘗試將這些東西放在代碼隱藏。

if (Nothing Selected In Datagrid) 
{ 
Button1.IsEnabled = false; 
} 
else 
{ 
Button1.IsEnabled = true; 
} 

此外請確保命名該按鈕,並用名稱替換Button1

+1

我正在使用MVVM,所以我不應該在代碼隱藏中有任何東西。 – xena12

+0

我不能,MVVM是這項任務,這不是我的選擇。 – xena12

+0

你在Visual Studio嗎?智能感知說什麼? –

0

您的按鈕命令綁定可能會產生干擾。該按鈕綁定的命令具有基於ICommand接口的CanExecute()函數。這會根據CanExecute()的真/假返回自動啓用和禁用該按鈕。你可以暫時取出這個命令,看看是否是罪魁禍首 - 我懷疑它是什麼。然後如果你想保留Command,你可以在DataGrid SelectedItem!= null的基礎上命令CanExecte()返回值,並且你根本不需要按鈕IsEnabled的觸發器。

+0

這不是。我拿出來了,但它仍然是一樣的。 – xena12

+0

好吧,很高興你找到它 - 很好找。 –

1

我明白了。我剛剛刪除

  IsSynchronizedWithCurrentItem="True" 

和一切工作正常。