我声明的组合框等:当一个值从组合框中选择的任何正在显示
<ComboBox ItemsSource="{Binding RenderableSeriesList, Mode=OneWay}" DisplayMemberPath="Tag" SelectedItem="{Binding SelectedRenderableSeries}" />
TheRenderableSeriesList是BaseRenderableSeries的的ObservableCollection。 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}" />
他说SelectedRenderableSeries没有指向正确的值。在你的建议中,价值观是正确的,目标是让知道UI改变。 – Maximus 2014-10-31 19:56:51
@Maximus不,他说*确实*指向正确的一个。它只是不显示。 – furkle 2014-10-31 19:57:40
你是正确的。这似乎与绑定到ContentControl的Tag属性有关。 – ashlar64 2014-11-03 17:21:19