WPF双向绑定不适用于CheckBox

时间:2019-07-02 21:00:01

标签: wpf checkbox binding

我无法与bool进行双向绑定。

Check_Status项源是<StackPanel Grid.Column="3" Grid.Row="3"> <ListBox Name ="listPrest" Height="91" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> <ListBox.ItemTemplate> <DataTemplate> <CheckBox Name="chkPrest" Width="220" IsChecked="{Binding Path=Check_Status, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> <TextBlock TextWrapping="Wrap"> <TextBlock.Text> <MultiBinding StringFormat="{}{0} ({1})"> <Binding Path="Nome" /> <Binding Path="Code" /> </MultiBinding> </TextBlock.Text> </TextBlock> </CheckBox> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </StackPanel> ,其中包含一个名为CheckBox的{​​{1}}字段,默认值为0。

数据绑定代码(DataClassesDataContext)是通过LINQtoSQL拖放生成的,因此应该没问题。 它包含此解决方案{{3}}的所有ViewModel部分。

我有以下XAML代码:

public partial class InsertServiceView : UserControl
{
    DataClassesDataContext db = new DataClassesDataContext();
    IQueryable<PRESTAZIONI> prest = null;
    public InsertServiceView()
    {
        InitializeComponent();
        UpdatePrestList();
    }

    private void UpdatePrestList()
    {
        if (prest != null)
        {
            foreach (PRESTAZIONI p in prest)
            {
                p.Check_Status = false;
            }
        } 
        else 
        {
            prest = from p in db.PRESTAZIONI select p;
        }

        listPrest.ItemsSource = prest.ToList();
    }

    private void ButtonSave_Click(object sender, RoutedEventArgs e)
    {
        if (prest.Where(p => p.Check_Status == true).Count() == 0)
        {
            MessageBox.Show("No selections");
            return;
        }
    }
}

在视图代码中,我像这样初始化CheckBox es的源:

Check_Status

即使我继续检查false,如果它仍然返回true,那么这也是最后一次。

曾经使用过一种绑定方法,但是我需要将false的值更新为所有protected virtual void SendPropertyChanged(String propertyName) { if ((this.PropertyChanged != null)) { this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } protected virtual void SendPropertyChanging() { if ((this.PropertyChanging != null)) { this.PropertyChanging(this, emptyChangingEventArgs); } } public partial class PRESTAZIONI : INotifyPropertyChanging, INotifyPropertyChanged { private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty); private bool _Check_Status; partial void OnCheck_StatusChanging(bool value); partial void OnCheck_StatusChanged(); [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Check_Status", DbType="Bit NOT NULL")] public bool Check_Status { get { return this._Check_Status; } set { if ((this._Check_Status != value)) { this.OnCheck_StatusChanging(value); this.SendPropertyChanging(); this._Check_Status = value; this.SendPropertyChanged("Check_Status"); this.OnCheck_StatusChanged(); } } } ,因为我也以其他形式使用它,并且希望它们全部为{{1} },当我打开这个。

我已经看到很多与我的问题类似的问题,并采用了所有解决方案,但仍然无法正常工作。 任何建议将不胜感激。 对不起,英语不好。

编辑:

表PRESTAZIONI有一个主键。 这是通过拖放生成的PRESTAZIONI的代码:

Query

1 个答案:

答案 0 :(得分:0)

我对IQueryable并不是很熟悉,但是可能是您的ToList()调用正在生成PRESTAZIONI的新实例吗?

在保存方法中,您正在检查原始IQueryable实例。感觉您应该存储List并检查它。