我如何从一个文本块是在一个列表视图中的数据模板中的数据

本文关键字:一个 数据 视图 列表 文本 | 更新日期: 2023-09-27 17:53:05

我制作了一个列表,并用文件url填充它,我想从该数据模板内的列表中的文本块中获取该url,但我为此目的制作的函数没有返回我预期的字符串。结果是null。我使用的函数是ListView的SelectionChanged属性

<ListView   ItemsSources="{x:Bind noticeData}"
            SelectedIndex="{x:Bind MasterListView.SelectedIndex, Mode=OneWay}"
            x:Name="uriList" SelectionChanged="uriList_SelectionChanged"
            IsItemClickEnabled="True" Grid.Row="3">
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="data:Datum_2">
                    <StackPanel>
                        <TextBlock x:Name="downFileUri" Grid.Row="2" Grid.Column="0"
                        VerticalAlignment="Center" HorizontalAlignment="Center"
                        Margin="0,0,0,20" Visibility="Visible"
                        Text="{x:Bind file_url}" TextWrapping="Wrap"/>
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
</ListView>

我如何从一个文本块是在一个列表视图中的数据模板中的数据

在遵循MVVM模式时,您通常会跳过使用控件事件处理程序,例如单击事件和选择事件。相反,该模式允许我们绑定到属性,并在属性设置块中捕获这些属性的更改。

不是绑定到SelectedIndex,而是绑定到SelectedItem

SelectedItem将是您的集合所持有的任何类型。在下面的例子中,我假设您有一个名为NoticeData

的对象
<ListBox SelectedItem="{Binding MySelectedItem, Mode=TwoWay}">

然后在视图模型中

private NoticeData _mySelectedItem;
public NoticeData MySelectedItem
{
   get{ return _mySelectedItem; }
   set{ _mySelectedItem = value;}
}

这是ListBox的MSDN文档,你会看到有SelectedItemSelectedItems属性。它们都可以被绑定。SelectedItems当然是在你启用多重选择时使用的。

其他你可能需要考虑的是在你的ViewModel上实现INotifyPropertyChanged,如果你还没有。

这是MSDN文档

基于注释编辑

还有另一种方法可以用于绑定。

如果你想将另一个元素绑定到你所选择的项目,你只需要命名你的元素。

  <ListBox x:Name="MyListBox" ItemsSource="{Binding myItems}"/>
  <TextBlock Text="{Binding ElementName=MyListBox, Path=SelectedItem.WhatEverProperty}"/>