WPF двусторонняя привязка не работает на CheckBox - PullRequest
0 голосов
/ 03 июля 2019

Мне не удается установить двустороннюю привязку с помощью CheckBox.

Источник элемента CheckBox равен PRESTAZIONI и содержит поле bool с именем Check_Status по умолчанию.0.

Код привязки данных (DataClassesDataContext) создается перетаскиванием LINQtoSQL, поэтому все должно быть в порядке.Он имеет все части ViewModel этого решения. WPF CheckBox Двухстороннее связывание не работает .

У меня есть этот код XAML:

<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 как:

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 в этом последнем случае, если он продолжает возвращать true.

Используется односторонняя привязкадля работы, но мне нужно обновить значение Check_Status для всех false, потому что я использую его также в других формах, и я хочу, чтобы они были все false, когда я открою эту.

IЯ видел много вопросов, похожих на мои, и применил все решения, но все же он не работает.Любое предложение будет очень оценено.Извините за плохой английский.

РЕДАКТИРОВАТЬ:

Таблица PRESTAZIONI имеет первичный ключ.Это код для PRESTAZIONI, созданный путем перетаскивания:

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 Ответ

0 голосов
/ 03 июля 2019

Я не очень знаком с IQueryable, но может ли быть так, что ваш ToList() вызов генерирует новые экземпляры PRESTAZIONI?

В вашем методе сохранения вы проверяете исходный экземпляр IQueryable. Такое ощущение, что вы должны вместо этого хранить List и проверять его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...