簡體   English   中英

當從組合框中選擇一個值時,則不會顯示任何內容

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM