检索应用程序设置

时间:2017-02-21 14:13:35

标签: c# wpf xaml mvvm

说我有以下内容 -

<TreeView ...>
    <TreeView.Resources>
        <command:DoSomethingCommand x:Key="DoSomethingCommand"/>
    </TreeView.Resources>
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate 
                    ItemsSource="{Binding Children}">
            <StackPanel>
                <TextBlock Text="{Binding Name}"/>
                <StackPanel.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="DoSomething" 
                              Command="{StaticResource DoSomethingCommand}"
                              CommandParameter="{Binding Mode=OneWay}"/>
...

DoSomethingCommand需要一般应用程序设置。假设它是一个Save命令,需要默认的目录位置。

如何将这个用于ICommand实现?

2 个答案:

答案 0 :(得分:1)

您应该能够在ICommandProperties.Settings.Default.NameOfTheSetting的实现中直接访问它,试图通过XAML传递它对我来说似乎不是一个好主意。

如果确实想要,请添加xmlns:

xmlns:properties="clr-namespace:TestSettings.Properties"

然后你可以通过以下方式绑定它:

<MenuItem Header="Some Menu"
          Command="{Binding Path=SomeCommand}" 
          CommandParameter="{Binding Source={x:Static properties:Settings.Default},
                                     Path=SomeSetting, 
                                     Mode=OneWay}" />

答案 1 :(得分:0)

我可以从您的代码段中看到两个选项。

  1. 通过您的viewmodel将适当的属性绑定传递到CommandParameter中的HierarchicalDataTemplate。您应该有资格使用{Binding FilePath, Mode=OneWay}这个名称,您可以将其声明为stringPath。然后,CommandParameter会将其作为您可以通过ICommand.Execute(object parameter)

  2. 处理的对象
  3. 直接在ICommand.Execute()方法中引用静态属性。