我无法与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
答案 0 :(得分:0)
我对IQueryable
并不是很熟悉,但是可能是您的ToList()
调用正在生成PRESTAZIONI
的新实例吗?
在保存方法中,您正在检查原始IQueryable
实例。感觉您应该存储List
并检查它。