簡體   English   中英

強制列表框重新呈現

[英]Forcing a ListBox to re-render

背景

我有一個列表框,其中包含由DataTemplates定義的項目。 現在,如果列表中的對象的IsEditable屬性設置為true,則該項目的屬性信息將顯示在文本框內(通過DataTemplate更改),而不是文本塊(以便用戶可以編輯該列表項的內容)

通過每個列表項內部的按鈕可以打開/關閉IsEditable。 有人告訴我,我們需要保持所有對象的狀態一致,這意味着我不能僅僅重新綁定ItemsSource並丟失所有內容。

目前,我正在使用它來重新渲染:

this.lbPoints.Dispatcher.Invoke(DispatcherPriority.Render, new Action(() => { }));

題:

前面提到的代碼片段KIND OF發揮了作用。 我所說的“種類”最終會導致我的數據重新呈現,但是只有當我滾動到列表的底部然后又滾動回到我要重新呈現的項目時,才可以。

1) 如何立即重新渲染數據,而無需滾動顯示它?

你們評論的人是對的,因為您使用的是錯誤的方式... 幾乎不需要強制ListBox重新呈現 您可能在嘗試切換DataTemplate使自己更加痛苦(盡管可能)。 取而代之的是,考慮將TextBox.IsReadOnly屬性綁定到IsEditable屬性的數據:

<TextBox IsReadOnly="{Binding IsEditable}" Text="{Binding Text}" />

另一種選擇是,當IsEditable屬性為true時,使用BooleanToVisibilityConverterDataTemplate顯示不同的Grid 不幸的是,該Converter沒有逆運算,因此您可以創建IsNotEditing屬性以綁定到最初顯示的DataTemplate中的Grid 我不確定是否很清楚...參見以下示例:

<DataTemplate DataType="{x:Type YourPrefix:YourDataType}">
    <Grid>
        <Grid Visibility="{Binding IsNotEditing, Converter={StaticResource 
            BooleanToVisibilityConverter}}">
            <!-- Define your uneditable UI here -->
        </Grid>
        <Grid Visibility="{Binding IsEditing, Converter={StaticResource 
            BooleanToVisibilityConverter}}">
            <!-- Define your editable UI here -->
        </Grid>
    </Grid>
</DataTemplate>

您還可以定義自己的具有IsInverted屬性的BooleanToVisibilityConverter類,以便僅使用一個IsEditing屬性。 您需要仍然聲明兩個Converters ,如下所示:

<Converters:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
<Converters:BoolToVisibilityConverter x:Key="InvertedBoolToVisibilityConverter" 
    IsInverted="True" />

然后,您的XAML將如下所示:

<Grid Visibility="{Binding IsEditing, Converter={StaticResource 
    InvertedBoolToVisibilityConverter}}">
    <!-- Define your uneditable UI here -->
</Grid>
<Grid Visibility="{Binding IsEditing, Converter={StaticResource 
    BoolToVisibilityConverter}}">
    <!-- Define your editable UI here -->
</Grid>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM