0

コードで何か問題が発生した場合はお知らせください。WPFメニューを「MenuViewModel」にバインドしようとしています。バインディングは、スタイルが設定されていないウィンドウで期待どおりに機能します。

私はMahApps.Metroをスタイリングの目的でのみ使用していますが、これはバインド後の外観です。

これはそれがどのように見えるかです

ソースコードへのリンクは次のとおりですhttp://sdrv.ms/W5uJpY

ViewModel:

public class Menu : INotifyPropertyChanged
{
    public Menu()
    {
        IsEnabled = true;
        Children = new List<Menu>();
    }

    #region [ Menu Properties ]

    private bool _isEnabled;
    private string _menuText;
    private ICommand _command;
    private IList<Menu> _children;

    public string MenuText
    {
        get { return _menuText; }
        set
        {
            _menuText = value;
            RaisePropertyChanged("MenuText");
        }
    }

    public bool IsEnabled
    {
        get { return _isEnabled; }
        set
        {
            _isEnabled = value;
            RaisePropertyChanged("IsEnabled");
        }
    }

    public ICommand Command
    {
        get { return _command; }
        set
        {
            _command = value;
            RaisePropertyChanged("Command");
        }
    }

    public IList<Menu> Children
    {
        get { return _children; }
        set
        {
            _children = value;
        }
    }

    #endregion

    #region [INotifyPropertyChanged]
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void RaisePropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
    #endregion
}

XAML:

<Menu Grid.Row ="0" IsMainMenu="True" x:Name="mainMenu" VerticalAlignment="Top" ItemsSource="{Binding Children}">
    <Menu.ItemContainerStyle>
        <Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource {x:Type MenuItem}}">
        <!--Or can be the line below, both yield the same result-->
        <!--<Style TargetType="{x:Type MenuItem}" BasedOn="{StaticResource MetroMenuItem}">-->
        <!--NOTICE THAT SUB MENU's of OPEN work fine-->
            <Setter Property="Header" Value="{Binding Path=MenuText}"/>
            <Setter Property="Command" Value="{Binding Path=Command}"/>
            <Setter Property="ItemsSource" Value="{Binding Path=Children}"/>
        </Style>
    </Menu.ItemContainerStyle>
</Menu>
4

1 に答える 1

0

ここで答えを見つけたと思います

http://karlshifflett.wordpress.com/2008/02/03/wpf-sample-series-databound-hierarchicaldatatemplate-menu-sample/

セパレーターを維持するとともに、バインディングを正しく行います。

于 2012-12-28T19:39:31.203 に答える