首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ComboBox SelectedItem结合

ComboBox SelectedItem结合
EN

Stack Overflow用户
提问于 2019-06-28 13:35:26
回答 1查看 56关注 0票数 1

我在我的ComboBox视图中有一个

代码语言:javascript
复制
<ComboBox Name="comboBox1" ItemsSource="{Binding MandantList}" SelectedItem="{Binding CurrentMandant, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Firma}"/>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

这是我的型号

代码语言:javascript
复制
public class MandantListItem : INotifyPropertyChanged
{
    public MandantListItem() { }

    string _Firma;
    bool _IsChecked;

    public string Firma
    {
        get { return _Firma; }
        set { _Firma = value; }
    }
    public bool IsChecked
    {
        get
        {
            return _IsChecked;
        }
        set
        {
            _IsChecked = value;
            OnPropertyChanged(nameof(IsChecked));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

这是我的ViewModel

代码语言:javascript
复制
public class MaViewModel : INotifyPropertyChanged
{
    public ObservableCollection<MandantListItem> MandantList { get { return _MandantList; } }
    public ObservableCollection<MandantListItem> _MandantList = new ObservableCollection<MandantListItem>();

    private MandantListItem _CurrentMandant;
    public MandantListItem CurrentMandant
    {
        get { return _CurrentMandant; }
        set
        {
            if (value != _CurrentMandant)
            {
                _CurrentMandant = value;
                OnPropertyChanged("CurrentMandant");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

如何填充ComboBox:

代码语言:javascript
复制
public zTiredV2.ViewModel.MaViewModel MAList = new zTiredV2.ViewModel.MaViewModel();
this.comboBox1.ItemsSource = MAList.MandantList;
MAList.MandantList.Add(new zTiredV2.Model.MandantListItem { Firma = "A", Homepage = "a.com", IsChecked = false });
MAList.MandantList.Add(new zTiredV2.Model.MandantListItem { Firma = "B", Homepage = "b.com", IsChecked = false });

但我的物品没有更新..。也尝试过通过IsChecked,但也没有成功.当我遍历MAList时,IsChecked总是假的。如何将TextBlock绑定到所选的Firma?

很难处理MVVM,但我喜欢它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-28 13:45:53

您应该将DataContextComboBox设置为视图模型的实例。否则,绑定将无法工作:

代码语言:javascript
复制
this.comboBox1.DataContext = MAList;

还请注意,属性的_MandantList后备字段不应该是公共的。事实上,你根本不需要它:

代码语言:javascript
复制
public ObservableCollection<MandantListItem> MandantList { get; } = new ObservableCollection<MandantListItem>();

设置DataContext会导致在选择ComboBox中的项时设置CurrentMandant属性。不过,它不会设置IsChecked属性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56807954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档