2015-07-21 100 views
1

我試圖在選中給定行的複選框時更改我的數據網格行的顏色,以及未選中時應該將值重置爲前一個值。當複選框被選中時,更改wpf數據網格行背景顏色

我正在使用MVVM來實現上述功能。

我的XAML代碼: -

<Window.Resources> 
     <Style x:Key="RowStyle" TargetType="{x:Type DataGridRow}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding DataContext.IsChecked, UpdateSourceTrigger=PropertyChanged}" Value="True"> 
        <Setter Property="Background" Value="Red"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 

</Window.Resources> 

<Grid> 
     <DataGrid Name="lbUsers" ItemsSource="{Binding Data}" CanUserAddRows="False" Grid.Column="1" Grid.Row="1" SelectedIndex="{Binding SelectionIndexChange, Mode=TwoWay}" AutoGenerateColumns="False"> 

      <DataGrid.Columns> 

       <DataGridTemplateColumn> 
        <DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <CheckBox Width="45" Height="20" Command="{Binding ElementName=lbUsers,Path=DataContext.IsChecked}" ></CheckBox> 
         </DataTemplate> 
        </DataGridTemplateColumn.CellTemplate> 
       </DataGridTemplateColumn> 
      </DataGrid.Columns> 

     </DataGrid> 
</Grid> 

下面給出的是視圖模型代碼:

 public ViewModel() 
     { 
      Data = new ObservableCollection<CommonData> 
      { 

      }; 

     } 



    private ObservableCollection<CommonData> _data; 
     public ObservableCollection<CommonData> Data 
     { 
      get 
      { 
       if (_data == null) 
       { 
        _data = new ObservableCollection<CommonData>() 
        { 

        }; 

       } 

       return _data; 
      } 
      set 
      { 
       if (value != this._data) 
       { 
        this._data = value; 

        NotifyPropertyChanged("Data"); 
       } 
      } 
     } 



     private bool _isChecked; 
     public bool IsChecked 
     { 
      get { return _isChecked; } 
      set { this._isChecked = value; NotifyPropertyChanged("IsChecked"); } 
     } 

請讓我知道錯了我在做什麼,以獲得給定功能的工作。

在此提前致謝,萬一缺少信息請通知我。

+0

你試圖刪除的DataContext。從綁定表達式? –

+0

或者,你是否分配了你的datacontext? – Ugur

+0

我試過它不工作.. – Nyk

回答

2

有兩件事情:

你分配一個x:Key的風格,但沒有使用它的DataGrid。拔出鑰匙,使它的默認樣式所有DataGridRow,或將其添加到網格:

RowStyle="{StaticResource RowStyle}" 

DataTrigger綁定,您還需要添加

ElementName=lbUsers 

此外,您Checkbox不綁定正確 - 這不是通過Command完成的。你將需要改變

Command={Binding... 

IsChecked={Binding... 
相關問題