[英]When a value is selected from the combobox nothing is being shown
我在聲明一個組合框,如:
<ComboBox ItemsSource="{Binding RenderableSeriesList, Mode=OneWay}" DisplayMemberPath="Tag" SelectedItem="{Binding SelectedRenderableSeries}" />
TheRenderableSeriesList是BaseRenderableSeries的Observable集合。 BaseRenderableSeries是一個抽象類,其中包含Tag屬性,而Tag屬性是一個對象。 TheRenderableSeriesList對象填充有全部都繼承自BaseRenderableSeries的類。
一切正常,除了不顯示所選項目。 選擇某項后,SelectedRenderableSeries屬性的確指向正確的屬性。 當組合框下拉時,該列表也是正確的。
我對為什么這個感到困惑
編輯:經過進一步調查,這可能是WPF本身的錯誤。
如果您嘗試從ContentControl中的Tag屬性綁定時,它似乎無法正確綁定。
這是一些代碼演示:
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}" />
據我了解,您是說您的綁定屬性在選擇更改時會正確更新,但更改不會顯示在屏幕上。 為了更新屏幕上的項目,必須在屬性更新時調用NotifyPropertyChanged方法。 這將向UI發出信號,表明屬性已設置為新值,並且綁定到該值的任何控件都應刷新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.