2017-09-07 1 views
0

Ich habe ein StackPanel, das ich ausblenden möchte, wenn im selben Fenster kein ausgewähltes Element aus einer ListView vorhanden ist. Derzeit, wenn ich das Fenster öffne, gibt es kein ausgewähltes Element und das StackPanel ist ausgeblendet, aber wenn ich etwas aus der ListView wähle, tritt keine Änderung auf.NullToVisibilityConverter wird nicht durch Auswahländerung ausgelöst

Ich bin Bindung der SelectedItem in der Listview wie:

<ListView 
    MinHeight="0" 
    MaxHeight="500" 
    Margin="10,10,10,0" 
    Background="#e7f5f4" 
    BorderThickness="0" 
    ItemsSource="{Binding Issues}" 
    ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
    SelectedItem="{Binding SelectedIssue}" 
    SelectionMode="Single"> 

Wo „SelectedIssue“ ist eine benutzerdefinierte Klasse Eigenschaft in meinem Viewmodel (mein ganzes Fenster hat die gleiche Datacontext). Ich Bindung zur Zeit die Eigenschaft Sichtbarkeit meines Stackpanel als:

<StackPanel 
    Grid.Column="1" 
    Margin="13,0,0,5" 
    VerticalAlignment="Bottom" 
    Background="#ebf7f6" 
    Orientation="Horizontal" 
    Visibility="{Binding SelectedIssue, 
    Converter={StaticResource NullToVisibilityConverter}, 
    UpdateSourceTrigger=PropertyChanged}"> 

Und mein Konverter ist:

public class NullToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value == null ? Visibility.Collapsed : Visibility.Visible; 
    } 

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

Was bin ich?

EDIT: Hier ist mein Getter/Setter

private Issue _selectedIssue; 
    public Issue SelectedIssue 
    { 
     get { return _selectedIssue; } 
     set { Set(ref _selectedIssue, value); } 
    } 

    public void RaisePropertyChanged([CallerMemberName]string propertyName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    public bool Set<T>(ref T storage, T value, [CallerMemberName]string propertyName = null) 
    { 
     if (Equals(storage, value)) 
      return false; 
     storage = value; 
     RaisePropertyChanged(propertyName); 
     return true; 
    } 
+1

Können Sie die Getter/Setter für SelectedIssue zeigen? Vermutlich fehlt nur ein Ereignis mit geänderter Eigenschaft, wenn sich der SelectedIssue-Wert ändert. Die Benutzeroberfläche wird nicht wissen, der Wert hat sich geändert, es sei denn, Sie sagen es ... – CodexNZ

+0

gerade hinzugefügt. Ich hebe die Veranstaltung auf, oder? –

+0

Sind im Ausgabefenster von Visual Studio verbindliche Fehler zu sehen, wenn die Bindungen wirksam werden? Manchmal sind sie leicht zu übersehen. –

Antwort

0

anscheinend das Problem ist, dass Sie nicht INotifyPropertyChanged implementiert haben oder Sie erhöhen nicht (in der SelectedIssue Eigenschaft Setter) das PropertyChanged Ereignis.

aber Sie können einfacher machen, die Bindung StackPanel direkt an ListView.SelectedItem:

<ListView x:Name="listView" 
    MinHeight="0" 
    MaxHeight="500" 
    Margin="10,10,10,0" 
    Background="#e7f5f4" 
    BorderThickness="0" 
    ItemsSource="{Binding Issues}" 
    ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
    SelectedItem="{Binding SelectedIssue}" 
    SelectionMode="Single"> 

<StackPanel 
    Grid.Column="1" 
    Margin="13,0,0,5" 
    VerticalAlignment="Bottom" 
    Background="#ebf7f6" 
    Orientation="Horizontal" 
    Visibility="{Binding SelectedItem, ElementName=listView 
    Converter={StaticResource NullToVisibilityConverter}" > 
Verwandte Themen