RibbonComboBox doesn't update SelectedValue

本文关键字:update SelectedValue doesn RibbonComboBox | 更新日期: 2023-09-27 18:15:44

我有一个ribbon组合框(MS ribbon开源项目,.Net 4.0),它是数据绑定到我的视图模型的属性,像这样:

XAML :

<ribbon:RibbonComboBox SelectionBoxWidth="130" Margin="3,0">
  <ribbon:RibbonGallery 
    SelectedValue="{Binding Source={StaticResource ViewModel},  
    Path=Document, Converter={StaticResource DocumentToDocumentNameConverter}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
      <ribbon:RibbonGalleryCategory
        ItemsSource="{Binding Source={StaticResource ViewModel}, 
        Path=Documents, Converter={StaticResource DocumentToDocumentNamesConverter}}">
      </ribbon:RibbonGalleryCategory>
    </ribbon:RibbonGallery>
  </ribbon:RibbonComboBox>

ViewModel :

public ViewModel { 
    #region Fields
    private TestDocument _Document;
    #endregion
    #region Properties
    public TestDocument Document
    {
        get 
        {
            return ModelClass.SelectedDocument; 
        }
        set 
        {
            if (value != null && value != _Document)
            {
                _Document = value;
                OnPropertyChanged("Document");
            }
        }
    }
    #endregion
}

效果很好,如果我在ComboBox中选择另一个值,则转换器将输入该值显示。

但是如果我像这样在ViewModel中设置属性

Document = new TestDocument("DocumentName");

组合框不显示选中的名称。

你有什么建议吗?我甚至试图绑定SelectedItem而不是SelectedValue,但这并不能解决问题。我忘了什么吗?

RibbonComboBox doesn't update SelectedValue

问题是您的SelectedItem/值不是RibbonComboBoxItemSource的一部分。因此,当设置时,它没有任何效果。

您需要做的是首先将新项目添加到ObservableCollection<TestDocument> Documents,然后设置Document

类似:

Documents.Add(new TestDocument("DocumentName"));
Document = Documents[Documents.Count - 1];

var newDocument = new TestDocument("DocumentName");
Documents.Add(newDocument);
Document = newDocument;