WPF中的Listview Text属性

本文关键字:属性 Text Listview 中的 WPF | 更新日期: 2023-09-27 18:23:49

我是WPF的新手,我注意到我们不能使用listview文本属性

listview1.SelectedItems[0].Text = textBlock.text;

但我想更改listview中所选项目的名称,所以我也尝试了

listView.SelectedItems[0] = textBlock.Text;

但这也不起作用,最后的代码也给了我一个错误,在这一行以及

textBlock.Text = myList[listView.Items.IndexOf(listView.SelectedItems[0])].ItemName;

我还有一个myList 的get,set方法

public string ItemName { get; set; }

还有列表视图的xaml代码

        <ListView x:Name="listView" HorizontalAlignment="Left" Height="301" Margin="10,10,0,0" VerticalAlignment="Top" Width="142" IsSynchronizedWithCurrentItem="True" BorderThickness="1" Foreground="Black" SelectionChanged="listView_SelectionChanged">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name" Width="150" DisplayMemberBinding="{Binding}"/>
            </GridView>
        </ListView.View>
    </ListView>

WPF中的Listview Text属性

SelectedItems是一个只读属性,当选择模式设置为Multiple时,它用于获取ListView的所选项目。如果您想更改所选ListView的项目中的某些属性值,则必须在SelectedItem上更改,如果您实现INotifyPropertyChanged接口(当ListView的SelectedItem中的属性发生更改时通知UI),您会感到更加舒适,因此:

  • 在xaml中定义listView,结合其ItemSourceSelectedItem

    <ListView ItemsSource="{Binding ListViewCollection}" SelectedItem="{Binding SelectedListViewItem,Mode=TwoWay}" SelectionMode="Single"></ListView>
    
  • 然后在codeehind(或ViewModel)中,定义集合和所选项目,实现INotifypropertyChanged并设置DataContext

    public partial class MainWindow : Window,INotifyPropertyChanged
    {
        private ObservableCollection<ListViewItemObj> _listViewCollection;
        private ListViewItemObj _selectedListViewItem;
    
        public ObservableCollection<ListViewItemObj> ListViewCollection
        {
            get { return _listViewCollection; }
            set
            {
                if (Equals(value, _listViewCollection)) return;
                _listViewCollection = value;
                OnPropertyChanged();
            }
        }
        public ListViewItemObj SelectedListViewItem
        {
            get { return _selectedListViewItem; }
            set
            {
                if (Equals(value, _selectedListViewItem)) return;
                _selectedListViewItem = value;
                OnPropertyChanged();
            }
        }
    
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
        }
     }
    
  • 要更新ListViewSelectedItem,只需对SelectedListViewItem属性执行此操作。

更新

假设您的ListView显示了以下类的集合:

public class ListViewItemObj:INotifyPropertyChanged
{
    private string _name;
    private string _val;
    public String Name
    {
        get { return _name; }
        set
        {
            if (value == _name) return;
            _name = value;
            OnPropertyChanged();
        }
    }
    public String Val
    {
        get { return _val; }
        set
        {
            if (value == _val) return;
            _val = value;
            OnPropertyChanged();
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

您的代码如下所示:

public partial class MainWindow : Window,INotifyPropertyChanged
{
    private ObservableCollection<ListViewItemObj> _listViewCollection = new ObservableCollection<ListViewItemObj>()
    {
       new ListViewItemObj(){Name = "item 1",Val = "Val1"},
       new ListViewItemObj(){Name = "item 2",Val = "Val2"},
       new ListViewItemObj(){Name = "item 3",Val = "Val3"},
    };
    private ListViewItemObj _selectedListViewItem;

    public ObservableCollection<ListViewItemObj> ListViewCollection
    {
        get { return _listViewCollection; }
        set
        {
            if (Equals(value, _listViewCollection)) return;
            _listViewCollection = value;
            OnPropertyChanged();
        }
    }
    public ListViewItemObj SelectedListViewItem
    {
        get { return _selectedListViewItem; }
        set
        {
            if (Equals(value, _selectedListViewItem)) return;
            _selectedListViewItem = value;
            OnPropertyChanged();
        }
    }

    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;
    }
 }

以下是如何显示和更新所选ListViewItem:的简单示例

 <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <ListView Grid.ColumnSpan="2" ItemsSource="{Binding ListViewCollection}" SelectedItem="{Binding SelectedListViewItem,Mode=TwoWay}" SelectionMode="Single">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name" Width="150" DisplayMemberBinding="{Binding Name}"/>
                <GridViewColumn Header="Name" Width="150" DisplayMemberBinding="{Binding Val}"/>
            </GridView>
        </ListView.View>
    </ListView>
    <TextBlock Grid.Column="0" Grid.Row="1" Text="Selected Item"/>
    <TextBox Grid.Column="1" Grid.Row="1" Text="{Binding SelectedListViewItem.Val,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
</Grid>