2017-02-26 4 views
0

Je les suivantes struct:Bind IsChecked à booléennes de struct WPF

public struct StreamContainer 
{ 
    public string Name { get; set; } 
    public bool IsVisible { get; set; } 
    public Canvas Canvas { get; set; } 
} 

Le député suivant:

private ObservableCollection <StreamContainer> m_listOfStreams = new ObservableCollection<StreamContainer>(); 

Un la propriété suivante:

public ObservableCollection<StreamContainer> ListOfStreams 
{ 
    get { return m_listOfStreams; } 
    set 
    { 
     m_listOfStreams = value; 
     OnPropertyChanged(); 
    } 
} 

Dans mon ' Xaml ', j'ai ceci:

<MenuItem x:Name="StreamsMenu" Header="Streams" Foreground="DarkRed" Focusable="False"> 
    <MenuItem x:Name="ColorStream" Header="Color" IsCheckable="True" IsChecked="True" Foreground="DarkRed" Click="SelectStream_OnClick"/> 
    <MenuItem x:Name="GrayStream" Header="Depth" IsCheckable="True" Foreground="DarkRed" Click="SelectStream_OnClick"/> 
</MenuItem> 

Est-il possible de lier chacun des MenuItemsIsChecked propriété (ColorStream et GrayStream) à leur correspondant IsVisible propriété? Cela signifie, par exemple, que la propriété IsChecked du ColorStream sera liée à la propriété 'IsVisible' du premier élément dans ObservableCollection.

+0

Notes secondaires, les propriétés OC doivent être en lecture seule, le point d'être une collection observable est qu'il a un événement CollectionChanged; le coller dans une propriété INPC est inutile. En outre, 'm_listOfStreams' eew. Allez lire les directives de conception de cadre. Vos collègues développeurs verront cela et vous jugeront calmement. – Will

Répondre

1

Si vous savez qu'il ya toujours au moins deux éléments de la collection source et que la DataContext du parent Menu est définie à une instance de la classe où est définie la propriété ListOfStreams vous pouvez le faire:

<Menu> 
    <MenuItem x:Name="StreamsMenu" Header="Streams" Foreground="DarkRed" Focusable="False"> 
     <MenuItem x:Name="ColorStream" Header="Color" IsCheckable="True" 
          IsChecked="{Binding Path=DataContext.ListOfStreams[0].IsVisible, RelativeSource={RelativeSource AncestorType=Menu}}" 
          Foreground="DarkRed" /> 
     <MenuItem x:Name="GrayStream" Header="Depth" IsCheckable="True" 
          IsChecked="{Binding Path=DataContext.ListOfStreams[1].IsVisible, RelativeSource={RelativeSource AncestorType=Menu}}" 
          Foreground="DarkRed"/> 
    </MenuItem> 
</Menu> 
+0

Fonctionne comme un charme. Merci!!! – Idanis