【发布时间】:2016-11-02 18:46:55
【问题描述】:
我想实现从“类结构”项目的 ObservableCollection 到具有 TextChanged 事件的 TextBox 的单向绑定。这个想法是,随着 Item 的 Comments 字段在 TextBox 中累积,TextBox 会自动向下滚动,以便始终显示最后一行。该集合绑定到 ListView,但我希望它以只读方式绑定到 TextBox。我不希望在 ResultViewModel 中添加其他方法,而是在 XAML 中添加。我该怎么做呢? TIA
// ViewModel
public class Item
{
public string First { get; set; }
public string Last { get; set; }
public string Comments { get; set; }
}
public class ResultViewModel
{
private ObservableCollection<Item> items = new ObservableCollection<Item>();
public ObservableCollection<Item> Items { get { return items; } }
// member functions
}
public ResultViewModel ViewModel { get; set; }
// What I have
<ListView x:Name="myListView" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
ItemsSource="{x:Bind ViewModel.Items}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:Item">
<StackPanel>
<TextBox Text="{x:Bind First}"/>
<TextBlock Text="{x:Bind Last}"/>
<TextBlock Text="{x:Bind Comments}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
// What I want
<TextBox Text="{x:Bind Comments}"/>
【问题讨论】:
-
准确理解你想要什么有点困难。您是否希望拥有一个用户无法修改的 TextBox,但 Comments 属性值会发生变化,并且您希望绑定的 TextBox 何时滚动到底部?
-
没错,TextBox 不能被用户修改,但是随着 Comments 属性的积累,它超过了 TextBox,我希望 TextBox 滚动到底部,以便显示最后一行。这就是想要绑定到 TextBox 背后的动机。不确定如何在 TextBox 嵌入 ListView 的情况下实现滚动到底部的行为。