2013-11-22 65 views

回答

0

您需要一個事件處理該按鈕:

private void OnClick(object sender, RoutedEventArgs e) 
{ 
    QtyColumn.IsReadOnly = !QtyColumn.IsReadOnly; 
} 
+0

我如何獲得QtyColumn在onClick它只是一個單元格權利? – Mussammil

+0

不,這是名稱爲Qty的列。 – hbsrud

1

如果使用CheckBoxToggleButton,那麼你可以只用一個Binding做到這一點,而無需後面的任何代碼:

<ToggleButton Name="EditButton" Content="Edit" /> 
... 
<DataGrid ItemsSource="{Binding YourCollection}"> 
    <DataGrid.Columns> 
     ... 
     <DataGridTextColumn Header="Quantity" IsReadOnly="{Binding IsChecked, 
      ElementName=EditButton}" Binding="{Binding Quantity}" /> 
     ... 
    </DataGrid.Columns> 
</DataGrid> 

更新>>>

如果喲你用一個班級在DataGrid(這總是一個好主意)顯示你的項目,然後有一個簡單的解決方案。您可以額外bool屬性Bind只是添加到IsReadOnly屬性,你可以在每次Quantity屬性更改時更新bool值:

public string SerialNo 
{ 
    get { return serialNo; } 
    set 
    { 
     serialNo = value; 
     NotifyPropertyChanged("SerialNo"); 
     // Update new property 
     IsQtyReadOnly = serialNo == "The read only value"; 
    } 
} 

public bool IsQtyReadOnly // <<< New property 
{ 
    get { return isQtyReadOnly; } 
    set { isQtyReadOnly= value; NotifyPropertyChanged("IsQtyReadOnly"); } 
} 

而XAML:

<ToggleButton Name="EditButton" Content="Edit" /> 
... 
<DataGrid ItemsSource="{Binding YourCollection}"> 
    <DataGrid.Columns> 
     ... 
     <DataGridTextColumn Header="Qty" IsReadOnly="{Binding IsQtyReadOnly}" 
      Binding="{Binding Qty}" /> 
     ... 
    </DataGrid.Columns> 
</DataGrid> 

如果你這樣做這樣,只要SerialNo屬性值發生更改,IsQtyReadOnly屬性將自動更新。

+0

在我的要求我有DataGridComboBox列即SerialNo如果用戶從組合框中選擇一個值,然後數量字段變成readonly = true,否則readonly = false – Mussammil