XAML如何创建响应的TextBlock?

时间:2019-02-06 15:26:08

标签: c# asp.net .net asp.net-mvc xaml

我有以下XAML代码:

<ListBox.ItemTemplate>
    <DataTemplate>
        <Grid Background="Transparent" Loaded="OnGridLoaded">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="5" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <TextBlock Foreground="{StaticResource CaptionColorBrush}" Text="&gt;" />
            <TextBlock Grid.Column="1" Background="Transparent" Style="{StaticResource BreadCrumsTextBlock}" 
                FontWeight="{Binding IsLastElement, Converter={StaticResource LastElementToFontWeightConverter}}"
                Text="{Binding Title}" Margin="5 0 0 0" TextTrimming="CharacterEllipsis" />
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="PreviewMouseLeftButtonDown">
                    <command:EventToCommand Command="{Binding Mode=OneWay, Path=DataContext.ReturnToFolderCommand, ElementName=ChannelsTab}" CommandParameter="{Binding NodeId}" />
                </i:EventTrigger>
            </i:Interaction.Triggers>
        </Grid>
    </DataTemplate>
</ListBox.ItemTemplate>

我想让TextBlock显示所有发送的文本。例如,如果我调整大小(扩展),它将仅显示第一次发送的文本(假设屏幕已还原)。谁能帮我解决问题?

1 个答案:

答案 0 :(得分:0)

包含Title的类必须实现INotifyPropertyChanged 您的课程需要看起来像这样:

public class Model : INotifyPropertyChanged
{
    //This is all that the interface requires
    public event PropertyChangedEventHandler PropertyChanged;

    private string _title;
    public string Title
    {
        get { return _title; }
        set
        {
            _text = value;
            if(PropertyChanged != null)
                PropertyChange(this, new PropertyChangedEventArgs("Title")); 
        }
    }
}

如果这是一个复杂的项目,建议您使用MVVM-Light http://www.mvvmlight.net/之类的MVVM框架,我过去在Xamarin开发中就使用过它。但是,还有许多其他选择。

MVVM的优点之一是,您可以将XAML(GUI)与源代码完全分离。我通常使用单独的项目来包含MVVM和XAML。然后,您可以创建单元测试以练习MVVM。