2011-07-27 23 views
1

を結合:ComboBox.SelectedItemは私が私のDataGrid内このコラム/コードを持って

<sdk:DataGridTemplateColumn CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="Auto" Header="Province/State"> 
        <sdk:DataGridTemplateColumn.CellTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Path=SelectedProvince.ProvinceName, Mode=OneWay}"/> 
         </DataTemplate> 
        </sdk:DataGridTemplateColumn.CellTemplate> 
        <sdk:DataG ridTemplateColumn.CellEditingTemplate>       
         <DataTemplate> 
          <ComboBox ItemsSource="{Binding Path=ProvinceList, Mode=TwoWay}" 
             SelectedItem="{Binding Path=SelectedProvince, Mode=TwoWay}" 
             DisplayMemberPath="ProvinceName" /> 
         </DataTemplate> 
        </sdk:DataGridTemplateColumn.CellEditingTemplate> 
       </sdk:DataGridTemplateColumn> 

はその後、これは(私は関係のないコードを切り取っている)の背後にあるコードである:ここでは

  public class BatchSeedingAddressVM : ViewModelBase 
      { 
       public BatchSeedingAddressVM() 
       { 
        _saveAddressButtonCommand = new RelayCommand(SaveAddressButtonCommand_OnExecute); 

        CreateJurisdictionList(); 
       } 

       public BatchSeedingAddressVM(int? batchSeedingAddressOID, string address1, string address2, string city, string postalCode, string province2Code) 
       { 
        _saveAddressButtonCommand = new RelayCommand(SaveAddressButtonCommand_OnExecute); 
        CreateJurisdictionList(); 

        BatchSeedingAddressOID = batchSeedingAddressOID; 
        Address1 = address1; 
        Address2 = address2; 
        City = city; 
        PostalCode = postalCode; 
        //SelectedProvince2Code = province2Code; 
        SelectedProvince = _provinceList.Where(x => x.Province2Code == province2Code).FirstOrDefault(); 
       } 


       private ObservableCollection<Province> _provinceList = new ObservableCollection<Province>(); 
       public ObservableCollection<Province> ProvinceList 
       { 
        get 
        { 
         return _provinceList; 
        } 
        set 
        { 
         if (_provinceList != value) 
         { 
          _provinceList = value; 
          RaisePropertyChanged("ProvinceList"); 
         } 
        } 
       } 

     private Province _selectedProvince; 
     [Display(Name = "Province")] 
     public Province SelectedProvince 
     { 
      get 
      { 
       return _selectedProvince; 
      } 
      set 
      { 
       if (_selectedProvince != value && value != null) 
       { 
        _selectedProvince = value;        
        RaisePropertyChanged("SelectedProvince");       
       } 
      } 
     } 
     } 

です問題:DataGridセルには2つのテンプレートがあります:CellTemplateとCellEditingTemplate。 CellTemplateがアクティブな場合、その中のテキストボックスはSelectedProvinceを計画どおりに選択し、その州の名前を表示します。問題は、CellEditingTemplateがアクティブになると、ComboBox内のComboBoxが(デフォルトの)SelectedItem値を取得せず、空のボックスを表示することです。

紛失しているものがありますか? CellEditingTemplateのコンボボックスにデフォルトのSelectedItemを設定することができるようにバインディングを設定する方法は?

ありがとうございます!

+0

私はSelectedValuePath = "Province2Code"という行を削除して、誰にも混乱させないようにしました。 – Andrei

+0

+1 ItemsSourceのモードをOneWayに設定する - 修正しました! =))ありがとう! あなたはそれを答えにするべきだと思います。 – Andrei

答えて

3

を私はItemsSourceのTwoWayバインディングが問題になると思います。

ItemsSource="{Binding Path=ProvinceList, Mode=TwoWay}"

私はあなたのデザインに応じてOneTimeまたはOneWayにそれを変更することをお勧めします。

2

私は間違っているかもしれないが、私はあなたがSelectedValuePathを使用している場合は、あなたの代わりにSelectedItemSelectedValueを使用する必要があると思いますので、この変更:これに

SelectedItem="{Binding Path=SelectedProvince, Mode=TwoWay}" 

SelectedValue="{Binding Path=SelectedProvince, Mode=TwoWay}" 
+0

同じ結果です。 :/ – Andrei

関連する問題