我如何从一个文本块是在一个列表视图中的数据模板中的数据
本文关键字:一个 数据 视图 列表 文本 | 更新日期: 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文档,你会看到有SelectedItem
和SelectedItems
属性。它们都可以被绑定。SelectedItems
当然是在你启用多重选择时使用的。
其他你可能需要考虑的是在你的ViewModel上实现INotifyPropertyChanged,如果你还没有。
这是MSDN文档
基于注释编辑
还有另一种方法可以用于绑定。
如果你想将另一个元素绑定到你所选择的项目,你只需要命名你的元素。
<ListBox x:Name="MyListBox" ItemsSource="{Binding myItems}"/>
<TextBlock Text="{Binding ElementName=MyListBox, Path=SelectedItem.WhatEverProperty}"/>