首页 > 解决方案 > 如何更改绑定到可观察集合的列表框中特定项目的属性?

问题描述

我有一个打印机型号:

public class Printer: BindableBase
    {
        private bool isDefault = false;
        public string Name { get; set; }
        public bool IsDefault
        {
            get { return isDefault; }
            set { SetProperty(ref isDefault, value); }
        }
    }

和打印机视图模型:

public class PrinterViewModel: BindableBase
    {
        public ObservableCollection<Printer> Printers { get; set; }

        public PrinterViewModel()
        {
            Printers = new ObservableCollection<Printer>();

            LoadPrinters();
        }

        public void LoadPrinters()
        {
            Printers.Add(new Printer { Name = "HP" });
            Printers.Add(new Printer { Name = "Sony" });
            Printers.Add(new Printer { Name = "Samsung" });
            Printers.Add(new Printer { Name = "LG" });
            Printers.Add(new Printer { Name = "Toshiba" });
        }
    }

和一个带有 Itemtemplate 的列表框,因此每个项目在 TextBlock 和一个按钮中显示其名称以更改该项目的“IsDefault”属性:

<ListBox ItemsSource="{Binding Printers }"> 
 <ListBox.ItemTemplate> 
  <DataTemplate> 
   <StackPanel Orientation="Horizontal"> 
    <TextBlock Text="{Binding Name}"/> 
    <Button x:Name="SetDefault" Content="Set as Default"/> 
   </StackPanel> 
  </DataTemplate> 
 </ListBox.ItemTemplate> 
</ListBox>

现在,我想在单击“SetDefault”按钮时将任何项目的“IsDefault”属性更改为所有其他项目的“true”和“false”。我怎样才能做到这一点?

提前谢谢任何帮助。

标签: wpfmvvmbindinglistboxcommand

解决方案


推荐阅读