2017-02-14 30 views
-1

Ниже приведен кодПроблема с окантовкой для ComboBox в WPF

<ComboBox Name="cmbRegisteredDriveList" 
      Width="150" HorizontalAlignment="Center" 
      ItemsSource="{Binding Path=DriveList}" 
      SelectedItem="{Binding Path=SelectedDrive, Mode=TwoWay}" 
      IsEnabled="{Binding IsBusy, Converter={StaticResource NotConverter}}" 
      ItemContainerStyle="{StaticResource xxxx.ComboBoxItem.Style}"> 

    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock x:Name="tbTemplate" Width="250" Visibility="Collapsed"/> 
       <TextBlock TextWrapping="NoWrap" 
          Text="{Binding VolumeLabel, Converter={StaticResource CenterEllipsisConverter}, ConverterParameter={x:Reference tbTemplate}}"/> 
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

Когда мы когда-либо изменить метку тома для диска мы получаем уведомление. Но выбранный элемент в поле со списком не обновляется. Может ли кто-нибудь помочь мне в этом. Я хочу отобразить измененную метку тома для выбранного элемента в поле со списком.

public ObservableCollection<DiskDrive> _driveList; 
public ObservableCollection<DiskDrive> DriveList { get { return _driveList; } } 
private DiskDrive _selectedDrive; 
public DiskDrive SelectedDrive 
{ 
    get { return _selectedDrive; } 
    set { _selectedDrive = value; NotifyPropertyChanged(() => SelectedDrive); } } 

Также мы уведомляем его, когда это необходимо.

NotifyPropertyChanged(() => DriveList); 
NotifyPropertyChanged(() => SelectedDrive); 

В class DiskDrive свойство VolumeLabel определяется следующим образом:

/// <summary> 
/// Get the volume name of this disk. This is the friendly name ("Stick"). 
/// </summary> 
/// <remarks> 
/// When this class is used to identify a removed USB device, the Volume 
/// property is set to String.Empty. 
/// </remarks> 
private string _volumeLabel; 
public string VolumeLabel 
{ 
    get { return _volumeLabel; } 
    set { _volumeLabel = string.IsNullOrWhiteSpace(value) ? string.Format(LocalizationManager.Instance["XXXX"], SerialNumber) : value; } 
} 
+2

Можете ли вы показать нам определение 'SelectedDrive'? – wkl

+2

Как вы меняете _VolumeLabel_? – Ron

+0

Попробуйте 'UpdateSourceTrigger' в вашей привязке. – AnjumSKhan

ответ

0

DiskDrive должны реализовывать INotifyPropertyChanged и VolumeLabel должны поднять PropertyChanged событие при изменении. В противном случае привязка не будет обновляться.

Также обратите внимание, что вы, скорее всего, будете утечки памяти при привязке к свойству класса, который не реализует INotifyPropertyChanged. См. here.

 Смежные вопросы

  • Нет связанных вопросов^_^