【问题标题】:Access enumeration type defined in view model from the view MVVM WPF从视图 MVVM WPF 访问视图模型中定义的枚举类型
【发布时间】:2025-12-20 17:05:08
【问题描述】:

在我的 MVVM WPF 应用程序中,我声明了一个枚举:

查看模型

namespace MyViewModel
{
    public class MyViewModelClass  
    {
      public enum MessageTypes
      {
          Info = 0,
          Error = 1
      };
    }
}

现在从视图来看,我正在尝试访问它以便将其用作控件中的静态资源,因此:

查看

xmlns:vm="clr-namespace:MyViewModel;assembly=MyViewModelAssembly"

<Image>
   <Image.Style>
        <Style TargetType="{x:Type Image}">
            <Setter Property="Source" Value="/Common.Images;component/Images/Info.png"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding MessageTypes}" Value="{x:Static vm:MessageTypes.Error}">
                    <Setter Property="Source" Value="/Common.Images;component/Images/Cancel.png"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
   </Image.Style>
</Image>

这里的问题是无法识别行Value="{x:Static vm:MessageTypes.Error}"。编译错误:

'MessageTypes' type not found.

【问题讨论】:

    标签: wpf xaml mvvm binding


    【解决方案1】:

    枚举被声明为嵌套类型(在 MyViewModelClass 类中),x:Static 标记扩展不支持。

    你应该这样声明它:

    namespace MyViewModel
    {
        public enum MessageTypes
        {
            Info = 0,
            Error = 1
        }
    
        public class MyViewModelClass  
        {
            ...
        }
    }
    

    【讨论】: