将IsChecked绑定到struct wpf的布尔值

时间:2017-02-26 12:28:32

标签: c# wpf mvvm binding ischecked

我有以下struct

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();
    }
}

在我的&#39; Xaml&#39;中,我有这个:

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

是否可以将MenuItems IsChecked属性(ColorStreamGrayStream)中的每一个绑定到匹配的IsVisible属性?例如,IsChecked的{​​{1}}属性将被绑定到&#39; IsVisible&#39; ColorStream中第一项的属性。

1 个答案:

答案 0 :(得分:1)

如果您知道源集合中始终至少有两个项目,并且父Menu的{​​{1}}被设置为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>