MVVM VisualBrush绑定

时间:2017-04-04 15:12:38

标签: c# mvvm mahapps.metro

不知道这是不是最好的"这样做的方式。 我正在学习MVVM的概念,对此感到抱歉。

我有4个按钮,我想在Rectangle中显示一个VisualBrush。 这是我的代码:

查看:

<Controls:MetroWindow.RightWindowCommands>
    <Controls:WindowCommands Name="WindowCommand" ItemsSource="{Binding Model.WindowCommandItems}">
        <Controls:WindowCommands.ItemTemplate>
            <DataTemplate DataType="{x:Type ModelType:MainModel}">
                <Button Command="{Binding Command}">
                    <StackPanel Orientation="Horizontal">
                        <Rectangle Width="20"
                           Height="20">
                            <Rectangle.OpacityMask>
                                <VisualBrush Stretch="Fill" Visual="{Binding Icon}" />
                            </Rectangle.OpacityMask>
                        </Rectangle>
                        <TextBlock Margin="4 0 0 0"
                           VerticalAlignment="Center"
                           Text="{Binding Header}" />
                    </StackPanel>
                </Button>
            </DataTemplate>
        </Controls:WindowCommands.ItemTemplate>
    </Controls:WindowCommands>
</Controls:MetroWindow.RightWindowCommands>

视图模型:

private void CreateWindowCommands() {
        var myResourceDictionary = new ResourceDictionary();
        myResourceDictionary.Source =
            new Uri("/BlackBoxBot;component/Resources/Icons.xaml",
                    UriKind.RelativeOrAbsolute);

        Model.WindowCommandItems = new ObservableCollection<Models.MainModel.WindowCommandModel> {
            new Models.MainModel.WindowCommandModel {
                Header = "Viewer",
                Icon = new VisualBrush() { Visual = (Visual)myResourceDictionary["users"] as Canvas}
            },
            new Models.MainModel.WindowCommandModel {
                Header = "Home",
                Icon = new VisualBrush() { Visual = (Visual)myResourceDictionary["appbar_home"] as Canvas }
            },
            new Models.MainModel.WindowCommandModel {
                Header = "Dashboard",
                Icon = new VisualBrush() { Visual = (Visual)myResourceDictionary["theater"] as Canvas }
            },
            new Models.MainModel.WindowCommandModel {
                Header = "Einstellungen",
                Icon = new VisualBrush() { Visual = (Visual)myResourceDictionary["settings"] as Canvas }
            }
        };
     ......

型号:

[PropertyChanged.ImplementPropertyChanged]
    public class WindowCommandModel {
        public string Header { get; set; }
        public ICommand Command { get; set; } = new RoutedCommand();
        public VisualBrush Icon { get; set; }
    }

我的结果:

Result

为什么我的图标没有显示?

1 个答案:

答案 0 :(得分:1)

<VisualBrush Stretch="Fill" Visual="{Binding Icon}" />

VisualBrush.Visual期望对象的类型为Visual

您绑定到VisualBrush

Icon = new VisualBrush() { Visual = (Visual)myResourceDictionary["users"] as Canvas}

请改为尝试:

Icon = myResourceDictionary["users"] as Canvas