Мне не удается установить двустороннюю привязку с помощью 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();
}
}
}