簡體   English   中英

C#WPF TwoWay CheckBox綁定未更新

[英]C# WPF TwoWay CheckBox Binding not updating

堆棧溢出!

從我的代碼開始:

XAML

<DataGrid Margin="25,112,25,10" Name="datGrid" RowHeight="30"
        ColumnWidth="150" BorderThickness="1" 
        Style="{StaticResource AzureDataGrid}" IsReadOnly="False"
        AutoGenerateColumns="False">
       <DataGrid.Columns>
           <DataGridTemplateColumn>
               <DataGridTemplateColumn.HeaderTemplate>
                   <DataTemplate>
                       <CheckBox Content="CREATE" Name="headerCheckBox" 
                           FontWeight="Bold" Width="Auto" 
                           Checked="headerCheckBox_Checked"/>
                   </DataTemplate>
               </DataGridTemplateColumn.HeaderTemplate>
               <DataGridTemplateColumn.CellTemplate>
                   <DataTemplate>
                       <CheckBox IsChecked="{Binding Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                   </DataTemplate>
               </DataGridTemplateColumn.CellTemplate>
               <DataGridTemplateColumn.CellStyle>
                   <Style TargetType="DataGridCell">
                       <Setter Property="HorizontalAlignment"  Value="Center"/>
                   </Style>
               </DataGridTemplateColumn.CellStyle>
           </DataGridTemplateColumn>
       <DataGridTextColumn Header="Username" Binding="{Binding Path=Username}"/>
       <DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}"/>
       <DataGridTextColumn Header="Last Name" Binding="{Binding Path=LastName}"/>
       <DataGridTextColumn Header="Email" Binding="{Binding Path=Email}"/>
   </DataGrid.Columns>

</DataGrid>

和C#

public partial class MainWindow : Window
{
    ObservableCollection<MyData> MyItems = new ObservableCollection<MyData>();

    public MainWindow()
    {
        datGrid.ItemsSource = MyItems;
        MyItems.Add(new MyData { IsChecked = false, Username = "apetecca", FirstName = "Anthony", LastName = "Petecca", Email = "apetecca@email.com"});
        MyItems.Add(new MyData { IsChecked = true, Username = "jhalls", FirstName = "Jake", LastName = "Halls", Email = "jhalls@email.com" });

    }

    public class MyData
    {
        public bool IsChecked { get; set; }
        public string Username { get; set; } 
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
    }

    private void headerCheckBox_Checked(object sender, RoutedEventArgs e)
    {
        foreach (var item in MyItems)
        {
            item.IsChecked = true;
        }
    }

當我單擊headerCheckBox進行檢查時,我已經看到了foreach循環中的變量,看到它正在將項目從fal​​se更改為true,但在DataGrid上沒有直觀地顯示出來。 但是,如果我手動選中或取消選中這些框,則在通過該循環時它將正確顯示。 循環正確設置了值,但沒有更改GUI顯示。

我在網上看到的所有內容都表明它與TwoWay模式和UpdateSourceTrigger有關。 這兩個都設置好了,我似乎找不到其他任何東西。

任何幫助將不勝感激!

編輯-

我也嘗試過改變班級,看起來像這樣

public class MyData
{
    private bool _isChecked;
    public bool IsChecked
    {
        get { return _isChecked; }
        set 
        { 
            _isChecked = value;
            OnPropertyChanged("IsChecked");
        }
    }
    public string Username { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }

    private void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

這也沒有解決。

實現INotifyPropertyChanged ,然后使屬性引發事件以實現此目的。

就像是:

public class MyData : INotifyPropertyChanged
{
    private bool isChecked;
    public bool IsChecked 
    { 
        get { return isChecked; } 
        set
        {
           if (isChecked != value)
           {
              isChecked = value;
              OnPropertyChanged("IsChecked");
           }
    }
    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM