【问题标题】:Problem binding .IsSelected count of checkbox to Label WPF问题绑定 .IsSelected 复选框到标签 WPF
【发布时间】:2020-02-07 09:01:08
【问题描述】:

我是新的 WPF,但仍在尝试掌握 MVVM 绑定。

基本上我正在尝试绑定 listofitems.Where(x => x.IsSelected == true).Count();到 IsSelected 表示复选框检查的标签。 每次取消选中复选框时,标签也会更新。

IsSelected 是 Item 类的属性

XML

<Label x:Name="numeratorLbl" Content="{Binding Path=ItemList, Mode=TwoWay}" />

Code Behind

        private bool mIsSelected;
        public bool IsSelected
        {
            get { return mIsSelected;  }
            set
            {
                mIsSelected = value;
                OnPropertyChanged("IsSelected");  
            }
        }
        private void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

public ObservableCollection<Item> listofitems = new ObservableCollection<Item>();



谁能帮帮我?

【问题讨论】:

  • 您能否说明您是如何定义ItemList 属性的?
  • 在您的虚拟机上有一个单独的属性来获取该信息。然后绑定到那个。也使用 TextBlock 并删除该控件的名称,它的使用为零。
  • 刚刚注意到为什么您的收藏是静态属性?!
  • 对静态属性感到抱歉。你或任何人能告诉我如何创建视图模型以及我应该绑定到哪个属性吗?

标签: c# wpf


【解决方案1】:

创建一个单独的属性,该属性接受状态并根据所需的任何/所有逻辑或输出文本返回正确的文本。

使用其他属性对上述属性进行通知更改。例如,每次更改IsSelected,它也会更改我们的新属性LabelStatus 的状态。 对所有其他与逻辑相关的集合属性执行此操作:

public bool IsSelected
{
    get { return mIsSelected;  }
    set
    {
        mIsSelected = value;
        OnPropertyChanged("IsSelected"); 
        OnPropertyChanged("LabelStatus"); 
    }
}

public string LabelStatus 
{ 
    get { return IsSelected? listofitems.Where( ... ).Count() : "-"; } 
}

然后像Content="{Binding LabelStatus}" /&gt;一样绑定到LabelStatus


我在我的博客上提供了一个更完整的例子:

Xaml: MVVM Example for Easier Binding

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2013-08-30
    • 2014-11-24
    • 2010-10-26
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多