转换器未挂接到PropertyChanged事件

时间:2018-05-10 12:12:46

标签: c# wpf treeview converter

我有一个树形视图,其层次结构绑定到实体框架模型。 下面的矩形仅适用于初始加载。当我触发Propertychanged事件时,它不会更新其颜色等。

<HierarchicalDataTemplate ItemsSource="{Binding tblLines}">
    <StackPanel Orientation="Horizontal" Margin="2">
        <Image Height="15" Margin="4" x:Name="imgTreeProject" Source="/DES STUDIO PR;component/Resources/Images/folder_closed.png"/>
        <TextBlock Text="{Binding Name}" Margin ="8" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"/>
        <Rectangle Name="X" Width="10" Height="10" Fill="{Binding Path=.,Converter={StaticResource CheckoutConverter},UpdateSourceTrigger=PropertyChanged}" ToolTip="{Binding Path=.,Converter={StaticResource CheckoutPersonConverter},UpdateSourceTrigger=PropertyChanged}" ToolTipService.IsEnabled="{Binding Path=.,Converter={StaticResource CheckoutToolTipVis},UpdateSourceTrigger=PropertyChanged}"/>
    </StackPanel>

以下是我的转换器:

public class CheckoutConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is TblBase)
        {
            var Baseentity = value as TblBase;

            if (Baseentity.COID == MainWindow.LocalUser.ID)
            {
                return Brushes.Green;
            }
            else if ((Baseentity.COID == 0) || (Baseentity.COID == null))
            {
                return Brushes.Transparent;
            }
            else if (Baseentity.COID != 0)
            {
                return Brushes.Black;
            }
        }
        return Brushes.Black;
    }

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

public class CheckoutPersonConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is TblBase)
        {
            var Baseentity = value as TblBase;
            //COID equals other user's ID

            if ((Baseentity.COID != 0) && (Baseentity.COID != null) && (Baseentity.COID != MainWindow.LocalUser.ID))
            {
               var user = DESDatabase.GetUser(Baseentity.COID.Value);
               return "Checked out by " + user;
            }
            else if (Baseentity.COID == MainWindow.LocalUser.ID)
                return "You have this node checked out.";
            else
                return "error";
        }
        return "error";
    }

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

public class CheckoutToolTipVis : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is TblBase)
        {
            var Baseentity = value as TblBase;
            //COID equals other user's ID

            if ((Baseentity.COID != 0) && (Baseentity.COID != null))
            {
                return true;
            }
            else
                return false;
        }
        return true;
    }

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

我的财产更改事件确实在这里被调用:

private Nullable<int> _coid;
public Nullable<int> COID
{
    get
    {
        NotifyPropertyChanged();
        return _coid;
    }
    set
    {
        _coid = value;
        NotifyPropertyChanged();
    }
}

属性更改事件适用于不使用转换器的树视图绑定,因此我不确定我缺少什么。

0 个答案:

没有答案