2009-03-11 13 views
3

DataGridTemplateColumnのボタンを無効にすることはできますか?WPF DataGrid Button Column Disable

<toolkit:DataGridTemplateColumn Header="Timer" Width="50"> 
        <toolkit:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Button Content="Start" Click="Button_Click" CommandParameter="{Binding}" /> 
         </DataTemplate> 
        </toolkit:DataGridTemplateColumn.CellTemplate> 
       </toolkit:DataGridTemplateColumn> 

ボタンの目的は、その行に関連付けられているオブジェクトに記録タイマーを開始することです:次のように私はDataGridTemplateを持っています。私のタイマーコードは正常に動作しますが、1つのタイマーしか実行できないように、他のすべての行のボタンも無効にしたいと思います。

は、私はそれを無効にする

WorkItemGrid.Columns[WorkItemGrid.Columns.Count - 1].GetCellContent(item).IsEnabled = false

を使用し、すべてのボタンが正しく無効になって表示されていますが、ボタンをクリックした場合の二回には再び有効化し、それに三度目をクリックすることを可能にし、クリックをトリガーしますイベント。実際にボタンを無効にすることは可能ですか?

答えて

2

私はボタンをバインドすることができる "IsEnabled"ブール値プロパティを公開するためにDatagridがバインドされているオブジェクトを持っています。ハンドラが呼び出されるたびに、元のコレクションから別のオブジェクトを取得し、そのプロパティをfalseに変更させるだけです。これにより、他のボタンは自動的に無効になります。

"timer"クラスを管理していない場合は、グリッドをオブジェクトのコレクションにバインドする前に、自分のクラスでラップすることができます。

+0

私の場合は動作しません。 – SANDEEP

0

、それは他の人に加えて、クリックされたボタンを無効にするには許容可能である場合には、その後、私はタイマーが開始されるとfalseに設定されているプロパティにButton.IsEnabledを結合するであろうし、その後操作たらtrueに戻ってそれを変更終わりました。

これが受け入れられない場合は、テンプレートを使用して各行にコントロールを作成するため、これを行う方法があるかどうかはわかりません。さて、は、他のすべてのボタンのビジュアルツリーを検索できますが、それは良いことのようには見えません(大量のデータでは遅くなることはありません)。

+0

私もそうですが、クリックしたボタンを有効にしたままにする必要があります。クリックされたボタンは、何か違う言い方に変更する必要があり、残りのボタンは無効にする必要があります。 – Stephan

0
its not working in my case. 

             <DataGridTemplateColumn Width="70" Header="Refund" > 
          <DataGridTemplateColumn.CellTemplate> 
           <DataTemplate> 
            <Button x:Name="btnRefundGame" IsEnabled="{Binding RESUND_STATUS}" CommandParameter="{Binding Path=IDEN_LOGID}" Content="Refund" Click="btnRefundGame_Click" ></Button> 
           </DataTemplate> 
          </DataGridTemplateColumn.CellTemplate> 
         </DataGridTemplateColumn>