2017-06-07 10 views
1

Ich habe einen Sichtbarkeitskonverter für ein DataGrid, der das Raster ausblenden sollte, wenn die Elementquelle für das Raster null ist. Die Elementquelle ist eine Eigenschaft der Klasse für das Fenster. HierVisibility Converter Binding funktioniert nicht

ist teilweise XAML für das Fenster - das Fenster und die Sichtbarkeit Wandler Definition und die Datenraster:

Fenster:

<Window x:Name="DiagramWindow" 
    x:Class="FabricAnalyzer.FabricDiagram" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:FabricAnalyzer" 

    xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase" 
    mc:Ignorable="d" 
    Title="FabricDiagram" 
    DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
<Window.Resources> 

    <ResourceDictionary> 
     <local:SwitchThumbColorConverter x:Key="SwitchThumbColor"/> 
     <local:PortThumbColorConverter x:Key="PortThumbColor"/> 
     <local:StringLengthVisiblityConverter x:Key="VisConverter"/> 
     <local:PortListVisiblityConverter x:Key="PortVisConverter"/> 

Datagrid:

<Grid Name="FabricGrid"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
      <ColumnDefinition></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <DataGrid Name="SVCPortDataGrid" Grid.Column="0" Width="Auto" 
        Visibility="{Binding Path=PortList, Converter= 
    {StaticResource PortVisConverter}}" 
         AutoGenerateColumns="False"> 

Hier ist der Code hinter für die Eigenschaft, an die es gebunden werden soll, und den VisibilityConverter. Die Idee ist, dass, wenn die PortList null ist - es wird standardmäßig sein - das DataGrid sollte zusammengebrochen bleiben. Ich habe überprüft, dass die PortList null ist, wenn ich es möchte.

public partial class FabricDiagram : Window 
{ 

    public List<PortResult> PortList = null; 

zuletzt der Sichtbarkeitskonverter. Ich habe im Debugger überprüft, dass es nicht aufgerufen wird.

public class PortListVisiblityConverter : IValueConverter 
{ 

    public Object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (value == null) 
     { 
      return Visibility.Collapsed; 
     } 
     else 
     { 
      return Visibility.Visible; 
     } 
    } 

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

Ich habe versucht, die XAML zu dieser Bindung

Ändern
Visibility="{Binding PortList, Converter={StaticResource PortVisConverter}}" 

Antwort

3

Ihre Bindung versagt, so dass der Konverter läuft nie.

public List<PortResult> PortList = null; 

erklärt ein Feld und Sie können nur auf Eigenschaften binden. Ändern zu:

public List<PortResult> PortList { get; set; } = null; 

wird Ihr erstes Problem lösen; Dann müssen Sie INotifyPropertyChanged verwenden, wenn Änderungen an dieser Eigenschaft an die Benutzeroberfläche weitergegeben werden sollen.

Nebenbei bemerkt, Sie könnten dies herausgefunden haben, wenn Sie das Ausgabefenster während des Laufens angesehen und System.Data Ausnahmen gesehen haben. Der einfachste Weg, um Probleme zu debuggen :)

Verwandte Themen