2014-10-31 2 views
0

я заявляю, выпадающий как:Когда значение выбирается из выпадающего списка ничего не показывается

<ComboBox ItemsSource="{Binding RenderableSeriesList, Mode=OneWay}" DisplayMemberPath="Tag" SelectedItem="{Binding SelectedRenderableSeries}" /> 

TheRenderableSeriesList является ObservableCollection из BaseRenderableSeries. BaseRenderableSeries - это абстрактный класс, который содержит свойство Tag, а свойство Tag - объект. Объект TheRenderableSeriesList заполняется классами, которые все наследуются от BaseRenderableSeries.

Все работает правильно, за исключением того, что не отображается выбранный элемент. Когда что-то выбрано, свойство SelectedRenderableSeries указывает на правильный. Кроме того, список корректен, когда выпадающее поле падает.

Я немного озадачен, почему это ...

EDIT: После дальнейшего исследования это может быть ошибка в самом WPF.

Если вы попытаетесь привязать свойство Tag к нему, когда оно исходит из ContentControl, оно не похоже на правильное связывание.

Вот код, который демонстрирует:

public event PropertyChangedEventHandler PropertyChanged; 

    protected void NotifyPropertyChanged(string propertyName) 
    { 
     if(this.PropertyChanged != null) 
      this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    public void AddItems() 
    { 
     TestObjects = new ObservableCollection<BaseTestObject>(); 
     TestObjects.Add(new TestObject("one")); 
     TestObjects.Add(new TestObject("two")); 

     TestObjects.Add(new TestObject2("22two22")); 
     TestObjects.Add(new TestObject2("t22hree222")); 

     TestObjects.Add(new TestObject("three")); 
     TestObjects.Add(new TestObject("four")); 
    } 

    private ObservableCollection<BaseTestObject> _testObjects = new ObservableCollection<BaseTestObject>(); 

    public ObservableCollection<BaseTestObject> TestObjects 
    { 
     get { return _testObjects; } 
     set 
     { 
      _testObjects = value; 
      this.NotifyPropertyChanged("TestObjects"); 
     } 
    } 

    private BaseTestObject _testObject; 

    public BaseTestObject TestObject 
    { 
     get { return _testObject; } 
     set 
     { 
      _testObject = value; 
      this.NotifyPropertyChanged("TestObject"); 
     } 
    } 
} 

// gets the Tag object property from FrameworkElement 
// using FrameworkElement works....but ContentControl doesn't 
public class BaseTestObject : ContentControl 
{ 
    //public object Tag { get; set; } 
    public string MyName { get; set; } 
} 

public class TestObject : BaseTestObject 
{ 
    string Name1 { get; set; } 

    public TestObject(string name) 
    { 
     Name1 = name; 
     Tag = name; 
    } 
} 

public class TestObject2 : BaseTestObject 
{ 
    string Name2 {get; set;} 

    public TestObject2(string name) 
    { 
     Name2 = name; 
     Tag = name; 
    } 
} 


    <ComboBox Height="40" Width="250" ItemsSource="{Binding TestObjects, Mode=TwoWay}"   DisplayMemberPath="Tag" SelectedItem="{Binding TestObject, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 

ответ

0

Как я понимаю, вы говорите, что ваши обновления связанных свойств правильно, когда выбор изменяется, но изменение не отображается на экране. Чтобы обновлять элементы на экране, вы должны вызвать метод NotifyPropertyChanged при обновлении свойства. Это будет сигнализировать пользовательскому интерфейсу, что свойство было установлено на новое значение, и любой элемент управления, связанный с этим значением, должен быть обновлен.

+0

Он сказал, что SelectedRenderableSeries не указывает на правильное значение. В вашем предложении ценность правильная, и целью было бы дать возможность узнавать пользовательский интерфейс об изменении. – Maximus

+0

@Maximus Нет, он говорит, что * делает * указывает на правильный. Он просто не появляется. – furkle

+0

Вы правы. Кажется, что это связано с привязкой к свойству тега ContentControl. – ashlar64

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