簡體   English   中英

如何調試轉換器

[英]How to debug a converter

我有這個轉換器

public class SelectedItemsTipoArchivoRipsToObservable : BaseConverter, IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var SelectedItems = value as IList;
        List<MyType> Seleccionados = SelectedItems.Cast<MyType>().ToList();
        return Seleccionados;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

我使用它將ListView.SelectedItems轉換為List<T>並且我正在使用此XAML

<ListView x:Name="LstTiposArchivos" Grid.Row="4" Grid.ColumnSpan="2" ItemsSource="{Binding TiposDeArchivos}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <cmd:EventToCommand Command="{Binding SeleccionarArchivosCommand}" CommandParameter="{Binding ElementName=LstTiposArchivos,Path=SelectedItems,Converter={StaticResource ResourceKey=SelectedItemsToObservable}}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <ListView.View>
        <GridView>
           .....
        </GridView>
    </ListView.View>
</ListView>

並在我的ICommand執行:

public void ExecuteSeleccionarArchivos(object p)
{
    TiposDeArchivosaProcesar = (List<MyType>)p;
}

我有兩個問題:

1-如何調試轉換器? 原因:我有一個斷點,但是只有在初始化窗口時它才會停止。

2-為什么此轉換器總是返回一個空列表(計數始終為0)?

首先,您根本不需要轉換器。

如果您只想將SelectedItems集合轉換為類型列表,則可以直接在命令執行處理程序中執行以下操作:

TiposDeArchivosaProcesar = (p as IList).Cast<MyType>().ToList();

如果您期望列表以外的其他值,也可以在方法中進行安全檢查。

var list = p as IList;
if(list != null)
{
   TiposDeArchivosaProcesar = list.OfType<MyType>().ToList();
}

現在,對於您的問題:

如何調試轉換器? 原因:我有一個斷點,但是只有在初始化窗口時它才會停止。

SLaks部分正確。 問題不是屬性TiposDeArchivosaProcesar而是SelectedItems

我只是交叉檢查, SelectedItems不是Dependency屬性,SelectedItem是DP,這意味着您可以綁定到SelectedItem,但不能綁定到SelectedItems。

為了觸發轉換器,它需要某種通知來通知已更改邊界值,但是由於SelectedItems不是DP也不是INPC屬性。 因此,無論何時更改,都不會發出通知。 因此,轉換器再也不會命中。

為什么此轉換器始終返回一個空列表(計數始終為0)?

初始化窗口后,Converter將僅被命中一次。 那時SelectedItems集合為空。

您的屬性(SelectedItems)不是DependencyProperty,並且不會引發INotifyPropertyChanged

因此,當您設置該屬性時,WPF永遠不會發現。

暫無
暫無

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

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