2012-04-16 15 views
1

MVVMライトをEF4およびSQL CE 4と併用していますが、私は観測可能なコレクションに問題があります。私のアプリケーションは、必然的にmvvmパターンを使う必要はありませんが、私はobservablecollectionの利点が必要なので、私はそれをどのように統合するかを学ぶことに決めました。私は正常に自分のリストボックスにプロパティエンティティの私のデータベースをリンクし、それらを表示することができます、私はまた、これらのエンティティのいくつかのプロパティをテキストボックスにリンクすることができますが、私はいつも私はこれらのプロパティをテキストボックスに入力して更新しようとしています。ここでテキストボックスとリストボックスのための私のXAMLコードである:ここでMVVMライトオブザーバブルコレクションへのバインド

<TextBox Text="{Binding SaleTitle, ValidatesOnDataErrors=true, Mode=TwoWay}" 
    <ListBox Height="424" 
     Margin="24,80,0,0"    
     x:Name="listBoxProperties" 
     VerticalAlignment="Top" 
     ItemTemplate="{StaticResource propertySummaryTemplate}" 
     IsSynchronizedWithCurrentItem="True" 
     Width="216" BorderThickness="0" Background="{x:Null}" 
     FontFamily="Segoe UI" 
     ItemsSource="{Binding PropertyList}" 
     SelectedItem="{Binding CurrentProperty, Mode=TwoWay}" 
     ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
     UseLayoutRounding="True" 
     HorizontalAlignment="Left" 
     ScrollViewer.VerticalScrollBarVisibility="Disabled" >   
    </ListBox> 

は私MainViewModelの部分のコードは次のとおり

private string _SaleTitle; 
    public string SaleTitle 
    { 
     get 
     { 
      if (CurrentProperty != null) 
       return CurrentProperty.SaleTitle; 
      else 
       return ""; 
     } 
     set 
     { 
      _SaleTitle = value; 
      RaisePropertyChanged("SaleTitle"); 
     } 
    } 



       private RelayCommand loadCommand; 
    public ICommand LoadCommand 
    { 
     get 
     { 
      if (loadCommand == null) 
       loadCommand = new RelayCommand(() => Load()); 
      return loadCommand; 
     } 
    } 
    private void Load() 
    { 
     PropertyList = new ObservableCollection<Property>((from property in entities.Properties.Include("Images") 
                  select property)); 
     propertyView = CollectionViewSource.GetDefaultView(PropertyList); 
     if (propertyView != null) 
      propertyView.CurrentChanged += new System.EventHandler(propertyView_CurrentChanged); 
     RaisePropertyChanged("CurrentContact"); 
     RaisePropertyChanged("SaleTitle"); 
     RaisePropertyChanged("Address"); 
     RaisePropertyChanged("AuctioneerName"); 
     RaisePropertyChanged("AgentName"); 
     RaisePropertyChanged("Price"); 
     RaisePropertyChanged("NextBid"); 
     RaisePropertyChanged("Status"); 
    } 


     void propertyView_CurrentChanged(object sender, System.EventArgs e) 
    { 
     RaisePropertyChanged("CurrentContact"); 
     RaisePropertyChanged("SaleTitle"); 
     RaisePropertyChanged("Address"); 
     RaisePropertyChanged("AuctioneerName"); 
     RaisePropertyChanged("AgentName"); 
     RaisePropertyChanged("Price"); 
     RaisePropertyChanged("NextBid"); 
     RaisePropertyChanged("Status"); 
    } 

    private Property _CurrentProperty; 
    public Property CurrentProperty 
    { 
     get 
     { 
      if (propertyView != null) 
       return propertyView.CurrentItem as Property; 
      return null; 
     } 

     set 
     { 
      _CurrentProperty = value; 
      RaisePropertyChanged("CurrentProperty"); 
     } 
    } 


    public ObservableCollection<Property> PropertyList 
    { 
     get 
     { 
      return propertyList; 
     } 

     set 
     { 
      if (propertyList == value) 
      { 
       return; 
      } 

      var oldValue = propertyList; 
      propertyList = value; 

      // Update bindings, no broadcast 
      RaisePropertyChanged(PropertiesPropertyName); 
     } 
    } 

    public MainViewModel() 
    { 
     if (IsInDesignMode) 
     { 
      // Code runs in Blend --> create design time data. 
     } 
     else 
     { 
      // Code runs "for real" 
      entities = new Model1Container1(); 
     } 
    } 

    ////public override void Cleanup() 
    ////{ 
    //// // Clean up if needed 

    //// base.Cleanup(); 
    ////} 
} 

}

リストボックスがからコンテンツに正常に取り込まれ現在選択されている項目が表示されますが、入力してクリックするかフォーカスを失うために何かを行うと、前にあった項目に戻るだけです。

答えて

2

SaleTitleプロパティの定義を見てください。 CurrentProperty.Saletitleから値を読み込みますが、値をローカルフィールドに設定します。ローカルフィールドは使用されません。

+0

私はそれを試したことを誓う、それはとてもシンプルだったとは信じられない - 私の心は10時間後にトリックを演じなければならない! – randomalbumtitle

関連する問題