2017-02-26 24 views
0

我有以下struct綁定器isChecked爲布爾結構的WPF

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

下面的私有成員:

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

的下列財產:

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

在我的「 Xaml',我有這個:

<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> 

是否有可能結合每個MenuItemsIsChecked財產(ColorStreamGrayStream),以與其相配套的IsVisible財產?例如,含義ColorStreamIsChecked屬性將被綁定到ObservableCollection中第一項的'IsVisible'屬性。

+0

旁註,OC屬性應該是隻讀的,它是一個可觀察的集合,它有一個CollectionChanged事件;堅持在INPC財產是毫無意義的。另外,'m_listOfStreams'eew。閱讀框架設計指南。你的開發人員會看到並悄悄地評判你。 – Will

回答

1

如果你知道,總有源集合中至少有兩個項目和父MenuDataContext被設置爲在ListOfStreams屬性被定義,你可以做到這一點的類的實例:

<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

工程就像一個魅力。謝謝!!! – Idanis

相關問題