C# 通过单击按钮使用视图模型更新Listview
我希望能够在用户单击listview项(行)并单击按钮时更新listview。这是我的密码: XAML 如果用户单击列表视图中的某一行并单击“加载到扫描仪”按钮,是否有人可以告诉我如何更新其中一个listview行并使进度条可见?欢迎使用示例按钮单击代码。试试这个 1-在VM中创建一个列表来保存所选项目,例如ObservableCollection SelectedScanners{get;set;} 2-在xaml中,将ListView的SelectedItem绑定到上面的 3-为按钮创建ICommandC# 通过单击按钮使用视图模型更新Listview,c#,wpf,listview,mvvm,viewmodel,C#,Wpf,Listview,Mvvm,Viewmodel,我希望能够在用户单击listview项(行)并单击按钮时更新listview。这是我的密码: XAML 如果用户单击列表视图中的某一行并单击“加载到扫描仪”按钮,是否有人可以告诉我如何更新其中一个listview行并使进度条可见?欢迎使用示例按钮单击代码。试试这个 1-在VM中创建一个列表来保存所选项目,例如ObservableCollection SelectedScanners{get;set;} 2-在xaml中,将ListView的SelectedItem绑定到上面的 3-为按钮创建IC
public ICommand UpdateScannersCommand
{
get
{
return new RelayCommand(()=>
{
... update code here
}
}
}
4-删除VISIBILITY属性,改为使用布尔值(并在xaml中使用转换器来确定可见性)
5如果要更新,需要实施InotifyProperty更改ICommand不起作用。我有按钮命令={Binding UpdateScannersCommand}。当我点击时,什么也没发生。我已将更新代码放在您指示的位置。
public class ScannerViewModel : INotifyPropertyChanged
{
private String[] scanners;
ObservableCollection<Scanner> items = new ObservableCollection<Scanner>();
private ArrayList driveList = new ArrayList();
public ScannerViewModel()
{
GetDrives();
scanners = (String[])driveList.ToArray(typeof(String));
if (scanners.Length <= 0)
{
return;
}
else
{
foreach (String scnr in scanners)
{
Config c = new Config();
c.LoadSysInfo(scnr + "\\Parameters\\SYSINFO.TXT");
ProgressBar progBar = new ProgressBar();
progBar.Height = 20;
progBar.Width = 150;
items.Add(new Scanner() { Drive = scnr, Model = c.Model, Serial = c.Serial, maxProgress = 10000, progress = 0, isVisible= Visibility.Hidden });
}
}
}
private void GetDrives()
{
driveList.Clear();
foreach (DriveInfo info in DriveInfo.GetDrives())
{
if (info.DriveType == DriveType.Removable)
{
if (Directory.Exists(info.RootDirectory.ToString() + "Parameters"))
{
driveList.Add(info.RootDirectory.ToString());
}
}
}
}
public ObservableCollection<Scanner> Scanners
{
get
{
return items;
}
set
{
items = value;
RaisePropertyChanged("Scanners");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
public class Scanner
{
public String Model { get; set; }
public String Serial { get; set; }
public Visibility isVisible { get; set; }
public String Drive { get; set; }
public Int32 progress { get; set; }
public Int32 maxProgress { get; set; }
}
}
public ICommand UpdateScannersCommand
{
get
{
return new RelayCommand(()=>
{
... update code here
}
}
}