2015-10-14 109 views
1

嗨我有一個WPF應用程序,WPF數據網格與可觀察的對象集合。可觀察集合中的每個對象都有一個布爾變量,它由數據網格中的複選框表示。我試圖做的是當我檢查框並使其對集合中的一個對象「真」時,它使集合的其他對象被設置爲「false」。換句話說,當我點擊我的數據網格複選框爲一個對象時,它取消選中集合中其他對象的複選框。它的這樣一個簡單的概念,但我已經嘗試了幾種方法來做到這一點,包括使用一個屬性,但我得到堆棧溢出,導致它永遠循環集合,我嘗試使用與點擊複選框相關的事件,但我不能獲取事件以將數據網格中的所有其他對象設置爲false,因爲我無法弄清楚如何訪問數據網格中的項目以修改它們。必須有一個非常簡單的方法來做到這一點,我俯瞰。wpf datagrid複選框列

的WPF這裏的代碼是:

<DataGrid x:Name="DataGrid1" AutoGenerateColumns="False"  ItemsSource="{Binding CollectionOfThings}" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserSortColumns="False" SelectionMode="Single" Margin="0,0,0,124"> 

<DataGrid.Columns> 
    <DataGridCheckBoxColumn Header="Column with a checkbox" Binding= "{Binding CheckBoxBooleanValue}" /> 

</DataGrid.Columns> 

我有C#代碼:

集合包含從這個簡單的類對象:

public class Thing 
{ 
public bool CheckBoxBooleanValue {get; set;} 
} 

我的主窗口我的WPF表單中的構造函數在應用程序啓動時創建集合:

public MainWindow() 
{ 
ObservableCollection<Thing> CollectionOfThings; 
Thing thing1 = new Thing(); 
CollectionOfThings.Add(thing1); 
Thing thing2 = new Thing(); 
CollectionOfThings.Add(thing2); 
} 

回答

1

基本上你需要一個單選按鈕功能。如果您的單選按鈕跟隨在同一組中,那麼當您將其中一個設置爲true時,其他按鈕將設置爲false。不幸的是,你不能直接在數據網格中添加一個單選按鈕列。一個小訣竅會爲你完成這項工作,我正在爲此粘貼代碼。

注意:當我將組名設置爲「myGroup」時,可確保所有單選按鈕都遵循同一組,並且滿足您所需的功能。

<DataGrid Name="data" AutoGenerateColumns="False" 
       ItemsSource="{Binding CollectionOfThings}" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserSortColumns="False" SelectionMode="Single" Margin="0,0,0,124"> 

     <DataGrid.Columns> 
      <DataGridTemplateColumn > 
       <DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <RadioButton IsChecked= "{Binding CheckBoxBooleanValue}" GroupName="myGroup" /> 
        </DataTemplate> 
       </DataGridTemplateColumn.CellTemplate> 
      </DataGridTemplateColumn> 

     </DataGrid.Columns> 
    </DataGrid> 
+1

非常感謝soooo!我完全忘記了使用單選按鈕控件! – pirit4