wpf listbox viewmodel 例子
摘要:
1.WPF ListBox 简介 
2.ViewModel 概念及作用 
3.WPF ListBox 与 ViewModel 的结合 
4.例子详解
正文:
一、WPF ListBox 简介
WPF(Windows Presentation Foundation)是微软提供的一款用于创建 Windows 桌面应用程序的技术。在 WPF 中,ListBox 是一种常用的控件,它可以用于显示一系列的项目,并支持选择和排序等功能。ListBox 通常与数据绑定技术一起使用,以便将数据呈现在界面上。
二、ViewModel 概念及作用
ViewModel 是一种设计模式,它主要用于将 UI(用户界面)与数据分离,使应用程序的逻辑更加清晰。ViewModel 包含应用程序的数据和业务逻辑,可以看作是模型(Model)与视图(View)的中间人。ViewModel 可以独立于视图进行修改和更新,从而实现界面与数据之间的解耦。
三、WPF ListBox 与 ViewModel 的结合
WPF 应用程序中,ListBox 通常与 ViewModel 结合使用,以便将数据呈现在界面上。为了实现这一目标,需要进行以下步骤:
1.创建一个 ViewModel 类,包含 ListBox 需要显示的数据和相关的业务逻辑。 
2.创建一个 DataTemplate,用于定义 ListBox 的项(Item)的样式和布局。 
3.在 ListBox 的 ItemTemplate 属性中绑定 ViewModel 类的属性,以便将数据呈现在界面上。 
4.实现 INotifyPropertyChanged 接口,以便在 ViewModel 中的数据发生变化时通知 UI 进行数据更新。
四、例子详解
下面是一个简单的 WPF ListBox 与 ViewModel 结合的例子:
1.创建一个 ViewModel 类,例如 `PersonViewModel`:
```csharp 
public class PersonViewModel : INotifyPropertyChanged 
{
    private string _name; 
    private int _age;
    public string Name 
    { 
        get { return _name; } 
        set 
        { 
            if (_name!= value) 
            { 
                _name = value; 
                RaisePropertyChanged("Name"); 
            } 
        } 
    }
    public int Age 
    { 
        get { return _age; } 
        set 
        { 
            if (_age!= value) 
            { 
                _age = value; 
                RaisePropertyChanged("Age"); 
            } 
        } 
    }
    public ICommand SelectCommand => new RelayCommand(Select);
    private void Select() 
    { 
        MessageBox.Show("选定了:" + Name + ", " + Age); 
    }
    public event PropertyChangedEventHandler PropertyChanged;
    private void RaisePropertyChanged(string propertyName) 
    { 
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
}
```
2.创建一个 DataTemplate,用于定义 ListBox 的项的样式和布局:
```xml 
fontweight属性bold
<DataTemplate x:Key="PersonTemplate"> 
    <StackPanel> 
        <TextBlock Text="{Binding Name}" FontSize="18" FontWeight="Bold"/> 
        <TextBlock Text="{Binding Age}"/> 
        <Button Content="选定" Command="{Binding SelectCommand}" Margin="10,0,0,0"/> 
    </StackPanel> 
</DataTemplate> 
```
3.在 ListBox 的 ItemTemplate 属性中绑定 ViewModel 类的属性,以便将数据呈现在界面上:
```xml 
<ListBox x:Name="PersonListBox" Margin="10" ItemsSource="{Binding Persons, UpdateSourceTrigger=PropertyChanged}"> 
    <ListBox.ItemTemplate> 
        <DataTemplate> 
            <PersonTemplate/> 
        </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
```
4.在 ViewModel 中实现 INotifyPropertyChanged 接口,以便在数据发生变化时通知 UI 进行数据更新。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。