簡體   English   中英

具有復合集合的組合框不會隨着對observablecollection的更改而更新

[英]Combobox with composite collection not updating with changes to observablecollection

如標題所示; 我有一個使用復合集合的組合框,以使用MVVM模式綁定到可觀察的集合。

如果我用現有數據加載模型,則組合框將顯示值,因此我知道綁定有效。 我可以將項目添加到可觀察集合中,並且它們會顯示在數據網格中,因此我知道可觀察集合上的notify屬性更改事件正在運行。 我懷疑它不起作用,因為復合集合使用“靜態資源”作為其來源,但是如果我將其更改為動態資源,則會收到錯誤消息:

不能在“綁定”類型的“源”屬性上設置“ DynamicResourceExtension”。 “ DynamicResourceExtension”只能在DependencyObject的DependencyProperty上設置。

我已經搜尋了數天以找到解決方案,而其他人也遇到了類似的問題,但這些解決方案尚未解決我的問題。

這是我的模型代碼:

    public class Model : ObservableObject
{
    #region Properties

    private string name;
    public string Name
    {
        get { return this.name; }
        set { this.name = value; }
    }

    private string balance;
    public string Balance
    {
        get { return this.balance; }
        set { this.balance = value; }
    }
    #endregion

我的ViewModel:

public class ViewModel : ObservableObject
{
    private ObservableCollection<Model> modelcollection;
    public ObservableCollection<Model> ModelCollection
    {
        get { return modelcollection; }
        set
        {
            modelcollection= value;
            RaisePropertyChangedEvent("ModelCollection");
        }
    }

    private string _name;
    public string Name 
    {
        get { return _name; } 
        set
        {
            _name = value;
            RaisePropertyChangedEvent("Name");
        }
    }
    private string _balance;
    public string Balance 
    {
        get { return _balance; } 
        set
        {
            _balance = value;
            RaisePropertyChangedEvent("Balance");
        }
    }

最后是我對組合框的視圖的XAML:

<ComboBox MinWidth="100" SelectedValue="{Binding combovalue, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="Name">
    <ComboBox.Resources>
        <vm:ViewModel x:Key="CollectionKey"/>
    </ComboBox.Resources>

    <ComboBox.ItemsSource>
        <CompositeCollection>
            <CollectionContainer Collection="{Binding ModelCollection, Source={StaticResource CollectionKey}, UpdateSourceTrigger=PropertyChanged}"/>
        </CompositeCollection>
    </ComboBox.ItemsSource>

    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

提前謝謝大家。

編輯:

所以我朝着一個方向前進; 對與錯尚待確定。

我認為我已將問題追究到組合框本身之外,因此這里需要更多上下文。

comobobox位於選項卡控件的第二個選項卡上。 每個選項卡項都有自己的數據上下文,這些上下文指向其自己的視圖模型。 在第一個選項卡上輸入數據,我希望該數據顯示在第二個選項卡的組合框中。

如果我將組合框放在第一個選項卡上,則該組合框會隨着在第一個選項卡上輸入的可觀察集合中的更改而更新。 因此,問題(我認為)是第二個選項卡上的組合框試圖同時綁定到兩個不同的視圖模型。 一個用於項源,另一個用於所選值。

在另一個線程中有人建議對數據上下文使用x:Reference,但是我似乎無法找出正確的語法。

如果您仍在閱讀本文,那么我們將不勝感激。

最后,我再也沒有從其他視圖模型中填充組合框。 我仍然不確定這是否可行。

最終對我有用的解決方案是將綁定所需的所有內容組合到一個視圖模型中。 它使視圖模型有點沉重,但在XAML上減少了很多,所以我想這是一個勝利。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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