2017-02-26 38 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

相关问题