如何从列表视图中的数据模板中的文本块获取数据?

时间:2016-06-29 18:34:46

标签: c# listview uwp

我创建了一个列表并用文件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>

1 个答案:

答案 0 :(得分:1)

当您经常关注MVVM pattern时,请跳过使用控件事件处理程序,例如单击事件和选择事件。相反,该模式允许我们绑定到属性并捕获属性设置块内的属性更改。

而不是绑定到您想要绑定到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 documentation

根据评论进行修改

还有一种替代方法可用于绑定。

如果您希望将另一个元素绑定到您选择的项目,您只需要命名您的元素。

  <ListBox x:Name="MyListBox" ItemsSource="{Binding myItems}"/>

  <TextBlock Text="{Binding ElementName=MyListBox, Path=SelectedItem.WhatEverProperty}"/>