2011-04-11 79 views
1

我有一個Silverlight中的數據網格,其中包含一個按鈕的模板列。在XAML基本上是這樣的 - 現在防止Silverlight的datagrid選擇從點擊按鈕點擊改變?

<sdk:DataGrid ItemsSource="{Binding Items}" SelectedItem="{Binding Selected, Mode=TwoWay}"> 
      <sdk:DataGrid.Columns> 
       <sdk:DataGridTemplateColumn> 
        <sdk:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <Button HorizontalAlignment="Right" Click="btn_Click"> 
           <StackPanel Orientation="Horizontal"> 
            <Image Source="/image.png"/> 
           </StackPanel> 
          </Button> 
         </DataTemplate> 
        </sdk:DataGridTemplateColumn.CellTemplate> 
       </sdk:DataGridTemplateColumn> 
       <!-- Ten Other Columns --> 
      </sdk:DataGrid.Columns> 
     </sdk:DataGrid> 

,在此設置,只要單擊該按鈕(無論是否被選中該行的btn_Click事件觸發罰款一切都很好,直到我添加了一個SelectionChanged事件。到DataGrid XAML的第一行現在是這樣的 -

<sdk:DataGrid ItemsSource="{Binding Items}" SelectedItem="{Binding Selected, Mode=TwoWay}" SelectionChanged="dg_SelectionChanged"> 

現在btn_Click事件將僅被點擊的按鈕是當前選中的行。否則只觸發SelectionChanged事件,永不火災。得到按鈕點擊。我知道selectionchanged事件觸發,因爲你顯然在切換選中的行我不明白的是爲什麼btn_Click從未被擊中。任何人都有想法,爲什麼這是以及如何解決它?

在此先感謝。

回答

1

也許您認爲Button.Click事件從不會觸發,因爲您在btn_Click和dg_SelectionChanged事件處理程序中設置了斷點。在這種情況下,調試器會進入dg_SelectionChanged,並且永遠不會進入btn_Click。但是,如果你在你的視圖中添加的TextBlock,並添加這樣的:

 private void btn_Click(object sender, RoutedEventArgs e) 
     { 
      textBlock.Text += "Button.Click "; 
     } 

     private void dg_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      textBlock.Text += "DataGrid.SelectionChanged "; 
     } 

你可以看到,這兩個事件提高罰款。

+0

謝謝。這並不是我們的問題,但是一旦我弄清楚了問題所在,這很有幫助,因爲我遇到了這個問題。 – Spencer 2011-04-13 12:35:37

0

我發現問題是什麼。我有一個Silverlight工具包繁忙指標正在包裝這個網格(以及它包含佈局網格)。在SelectionChanged事件中,我將忙指標IsBusy屬性切換爲true。顯然這會導致在忙指示符下面觸發的所有事件取消(包括我的btn_Click)事件。因此,要回答我的問題:SelectionChanged沒有終止事件,它正在調用佔用btn_Click的selectionchanged事件中的忙指示符。