私はいくつかのホテルのアプリケーションに取り組んでいます。メインウィンドウにホテル滞在リストのリストビューがあります。リストビューには、滞在が終了したかどうかを天気に通知するために使用されるチェックボックス列が 1 つあります。Listview は、ビュー モデルのプロパティにもバインドされます。チェックボックスは、ビュー モデルからのコマンドにバインドされます。
これはリストビューのバインディングです
<ListView SelectionMode="Single" Height="428" HorizontalAlignment="Left" Margin="6,6,0,0" Name="lvStays" VerticalAlignment="Top" Width="654" BorderBrush="Black" Foreground="Black" ItemsSource="{Binding Path=MainGuests}" SelectedItem="{Binding Path= MainGuest}" />
MainWindowViewModel
private ServiceReference1.tblStayGuest mainGuest;
public ServiceReference1.tblStayGuest MainGuest
{
get
{
return mainGuest;
}
set
{
mainGuest = value;
OnPropertyChanged("MainGuest");
}
}
private ObservableCollection<ServiceReference1.tblStayGuest> mainGuests;
public ObservableCollection<ServiceReference1.tblStayGuest> MainGuests
{
get
{
return mainGuests;
}
set
{
mainGuests = value;
OnPropertyChanged("MainGuests");
}
}
private ICommand _FinishedStay;
public ICommand FinishedStay
{
get
{
if (_FinishedStay == null)
{
_FinishedStay = new DelegateCommand(delegate()
{
try
{
ServiceReference1.Service1Client wcf = new ServiceReference1.Service1Client();
wcf.FinishedStay(MainGuest);
if (MainGuest.tblStay.IsFinished == true)
{
MainGuests.Remove(MainGuest);
}
}
catch
{
Trace.WriteLine("working...", "MyApp");
}
});
}
return _FinishedStay;
}
}
これがWCFサービスの方法です
bool IService1.FinishedStay(tblStayGuest mainGuest)
{
try
{
context = new HotelBaseEntities();
tblStayGuest stGuest = (from stg in context.tblStayGuests where stg.StayGuestID == mainGuest.StayGuestID select stg).FirstOrDefault();
tblStay stay = (from st in context.tblStays where st.StayID == mainGuest.StayID select st).FirstOrDefault();
tblGuest guest = (from g in context.tblGuests where g.GuestID == mainGuest.GuestID select g).FirstOrDefault();
guest.IsCheckedOut = true;
stGuest.IsMainGuest = false;
stay.IsFinished = true;
context.SaveChanges();
return true;
}
catch (Exception e)
{
e.StackTrace.ToString();
return false;
}
}
ここで管理しようとしているのは、mainGuest.IsMainGuestの値をfalseに変更することです。wcf メソッドでは値が変更されますが、FinishedStay コマンドでは、これを実行しようとしています: MainGuests.Remove(MainGuest); MainGuest.IsMainGuest の値は True に戻ります。また、この値はデータベース テーブルでは変更されません。なぜこうなった?