C# 如何调试转换器

C# 如何调试转换器,c#,wpf,xaml,C#,Wpf,Xaml,我有这个转换器 public class SelectedItemsTipoArchivoRipsToObservable : BaseConverter, IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { var SelectedItems = va

我有这个转换器

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();
    }
}
在我的
i命令中执行:

public void ExecuteSeleccionarArchivos(object p)
{
    TiposDeArchivosaProcesar = (List<MyType>)p;
}
public void ExecuteSeleccionarArchivos(对象p)
{
TiposDeArchivosaProcesar=(列表)p;
}
我有两个问题:

1-如何调试转换器?原因:我有一个断点,但它只在初始化窗口时停止

2-为什么此转换器始终返回空列表(计数始终为0)

您的属性(SelectedItems)不是DependencyProperty,并且不会引发
INotifyPropertyChanged

因此,当您设置属性时,WPF永远不会发现。

您的属性(SelectedItems)不是DependencyProperty,并且不会引发
INotifyPropertyChanged

因此,当您设置属性时,WPF永远不会发现。

您的属性(SelectedItems)不是DependencyProperty,并且不会引发
INotifyPropertyChanged

因此,当您设置属性时,WPF永远不会发现。

您的属性(SelectedItems)不是DependencyProperty,并且不会引发
INotifyPropertyChanged


因此,当您设置属性时,WPF永远不会发现。首先,您根本不需要转换器

如果您想将SelectedItems集合类型转换为您的类型列表,可以直接在命令执行处理程序中执行以下操作:

TiposDeArchivosaProcesar = (p as IList).Cast<MyType>().ToList();
TiposDeArchivosaProcesar=(p作为IList.Cast().ToList();
如果您预期的值不是列表中的值,还可以在方法中进行安全检查

var list = p as IList;
if(list != null)
{
   TiposDeArchivosaProcesar = list.OfType<MyType>().ToList();
}
var list=p作为IList;
如果(列表!=null)
{
TiposDeArchivosaProcesar=list.OfType().ToList();
}

现在,请回答您的问题:

如何调试转换器?原因:我有一个断点, 但它仅在初始化窗口时停止

SLaks部分是正确的。问题不在于属性TiposDeArchivosaProcesar,而在于SelectedItems

我只是反复检查,SelectedItems不是一个依赖属性,而SelectedItem是一个DP,这意味着您可以绑定到SelectedItem,但不能使用SelectedItems

要启动转换器,需要某种类型的通知,说明有界值已更改,但由于SelectedItems不是DP,也不是INPC的属性。因此,无论何时更改,都不会发出通知。因此,转换器不会再次命中

为什么此转换器始终返回空列表(计数始终为0)


在初始化窗口时,转换器只会被点击一次。当时SelectedItems集合是空的。

首先,您根本不需要转换器

如果您想将SelectedItems集合类型转换为您的类型列表,可以直接在命令执行处理程序中执行以下操作:

TiposDeArchivosaProcesar = (p as IList).Cast<MyType>().ToList();
TiposDeArchivosaProcesar=(p作为IList.Cast().ToList();
如果您预期的值不是列表中的值,还可以在方法中进行安全检查

var list = p as IList;
if(list != null)
{
   TiposDeArchivosaProcesar = list.OfType<MyType>().ToList();
}
var list=p作为IList;
如果(列表!=null)
{
TiposDeArchivosaProcesar=list.OfType().ToList();
}

现在,请回答您的问题:

如何调试转换器?原因:我有一个断点, 但它仅在初始化窗口时停止

SLaks部分是正确的。问题不在于属性TiposDeArchivosaProcesar,而在于SelectedItems

我只是反复检查,SelectedItems不是一个依赖属性,而SelectedItem是一个DP,这意味着您可以绑定到SelectedItem,但不能使用SelectedItems

要启动转换器,需要某种类型的通知,说明有界值已更改,但由于SelectedItems不是DP,也不是INPC的属性。因此,无论何时更改,都不会发出通知。因此,转换器不会再次命中

为什么此转换器始终返回空列表(计数始终为0)


在初始化窗口时,转换器只会被点击一次。当时SelectedItems集合是空的。

首先,您根本不需要转换器

如果您想将SelectedItems集合类型转换为您的类型列表,可以直接在命令执行处理程序中执行以下操作:

TiposDeArchivosaProcesar = (p as IList).Cast<MyType>().ToList();
TiposDeArchivosaProcesar=(p作为IList.Cast().ToList();
如果您预期的值不是列表中的值,还可以在方法中进行安全检查

var list = p as IList;
if(list != null)
{
   TiposDeArchivosaProcesar = list.OfType<MyType>().ToList();
}
var list=p作为IList;
如果(列表!=null)
{
TiposDeArchivosaProcesar=list.OfType().ToList();
}

现在,请回答您的问题:

如何调试转换器?原因:我有一个断点, 但它仅在初始化窗口时停止

SLaks部分是正确的。问题不在于属性TiposDeArchivosaProcesar,而在于SelectedItems

我只是反复检查,SelectedItems不是一个依赖属性,而SelectedItem是一个DP,这意味着您可以绑定到SelectedItem,但不能使用SelectedItems

要启动转换器,需要某种类型的通知,说明有界值已更改,但由于SelectedItems不是DP,也不是INPC的属性。因此,无论何时更改,都不会发出通知。因此,转换器不会再次命中

为什么此转换器始终返回空列表(计数始终为0)


在初始化窗口时,转换器只会被点击一次。当时SelectedItems集合是空的。

首先,您根本不需要转换器

如果您想将SelectedItems集合类型转换为您的类型列表,可以直接在命令执行处理程序中执行以下操作:

TiposDeArchivosaProcesar = (p as IList).Cast<MyType>().ToList();
TiposDeArchivosaProcesar=(p作为IList.Cast().ToList();
如果您预期的值不是列表中的值,还可以在方法中进行安全检查

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