Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换器没有';在命令执行后无法调用_C#_Wpf_Binding_Command_Converter - Fatal编程技术网

C# 转换器没有';在命令执行后无法调用

C# 转换器没有';在命令执行后无法调用,c#,wpf,binding,command,converter,C#,Wpf,Binding,Command,Converter,这个按钮应该做的是在可用的颜色列表中循环,并相应地更改背景颜色 最初,我将视图模型代码的这一部分放在一个大/主视图模型中,但决定将其拆分,以便我的每个用户控件都有自己的视图模型。我尝试在OnChangeColor()方法执行的地方设置一个断点,我看到状态确实发生了变化,但它似乎没有将这种变化持续到转换器,因此根本不会更新UI的背景色 我已经发布了下面的代码,我已经对其进行了编辑,目前正在与之合作,试图找出问题所在 主窗口 <Window.DataContext> &l

这个按钮应该做的是在可用的颜色列表中循环,并相应地更改背景颜色

最初,我将视图模型代码的这一部分放在一个大/主视图模型中,但决定将其拆分,以便我的每个用户控件都有自己的视图模型。我尝试在OnChangeColor()方法执行的地方设置一个断点,我看到状态确实发生了变化,但它似乎没有将这种变化持续到转换器,因此根本不会更新UI的背景色

我已经发布了下面的代码,我已经对其进行了编辑,目前正在与之合作,试图找出问题所在

主窗口

    <Window.DataContext>
    <local:MainWindowViewModel />
</Window.DataContext>
<Window.Resources>
    <DataTemplate DataType="{x:Type local:CameraListViewModel}">
        <local:MainView />
    </DataTemplate>
    <DataTemplate DataType="{x:Type rep:ReportViewModel}">
        <rep:ReportView />
    </DataTemplate>
    <DataTemplate DataType="{x:Type cam:CameraMonitorViewModel}">
        <cam:CameraMonitorView />
    </DataTemplate>
    <DataTemplate DataType="{x:Type cam:CameraPropertiesViewModel}">
        <cam:CameraPropertiesView />
    </DataTemplate>
</Window.Resources>
<Grid>
    <ContentControl Content="{Binding CurrentViewModel}" />
</Grid>
主视图

    <UserControl.Resources>
    <conv:EnumToColorConverter x:Key="enumToColorConvert"/>
    <cam:CameraPropertiesViewModel x:Key="CPVM" />
</UserControl.Resources>

<Grid Background="{Binding Path=State, Source={StaticResource CPVM},  Converter={StaticResource enumToColorConvert}}">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition  />
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>

    <cam:CamerasListView />

    <cam:CameraPropertiesView Grid.Column="1"/>

    <cam:CameraMonitorView Grid.Row="1" 
                           Grid.ColumnSpan="2" />

    <cam:CameraFunctionView Grid.Row="2" 
                            Grid.ColumnSpan="2"/>
</Grid>

资源:

<local:CameraPropertiesViewModel x:Key="CPVM" />

钮扣

 <Button Style="{StaticResource circleButton}"
                    Command="{Binding ChangeColorCommand, Source={StaticResource CPVM}}"                     
                    Content="Change Theme" 
                    Width="100" 
                    HorizontalAlignment="Center" 
                    VerticalAlignment="Center"  
                    Grid.Column="2"
                    Grid.Row="2"/>

CameraPropertiesView.xaml

<UserControl.Resources>
    <local:CameraPropertiesViewModel x:Key="CPVM" />
    <Style TargetType="{x:Type Button}" x:Key="circleButton">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <Grid>
                        <Viewbox>
                            <Canvas Width="50" Height="50">
                                <Ellipse Fill="{TemplateBinding Control.Background}" Width="50" Height="50"/>
                            </Canvas>
                        </Viewbox>
                        <ContentPresenter VerticalAlignment="Center" HorizontalAlignment="Center" Content="{TemplateBinding Button.Content}"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</UserControl.Resources>

<Grid>
    <GroupBox Header="Camera Details" 
              Height="130" 
              Width="386" 
              HorizontalAlignment="Right" 
              VerticalAlignment="Top"
              Margin="10">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition />
                <ColumnDefinition Width="120" />
            </Grid.ColumnDefinitions>

            <Label Height="25" 
                   Width="70" 
                   Content="Name" 
                   HorizontalAlignment="Center" 
                   VerticalAlignment="Center"
                   HorizontalContentAlignment="Right" />
            <TextBox Text="{Binding ConnectedCamera.Name}" 
                     HorizontalAlignment="Center" 
                     VerticalAlignment="Center" 
                     Height="23" 
                     Width="160"
                     Grid.Column="1"
                     IsReadOnly="True" />

            <Label Height="25" 
                   Width="70" 
                   Content="Model" 
                   HorizontalAlignment="Center" 
                   VerticalAlignment="Center" 
                   Grid.Row="1"
                   HorizontalContentAlignment="Right" />
            <TextBox Text="{Binding ConnectedCamera.Model}" 
                     HorizontalAlignment="Center" 
                     VerticalAlignment="Center" 
                     Height="23" 
                     Width="160"
                     IsReadOnly="True"
                     Grid.Column="1"
                     Grid.Row="1" />

            <Label Height="25" 
                   Width="70" 
                   Content="Ip Address" 
                   HorizontalAlignment="Center" 
                   VerticalAlignment="Center" 
                   Grid.Row="2"
                   HorizontalContentAlignment="Right" />
            <TextBox Text="{Binding ConnectedCamera.IpAddress}" 
                     HorizontalAlignment="Center" 
                     VerticalAlignment="Center" 
                     Height="23" 
                     Width="160"
                     IsReadOnly="True" 
                     Grid.Column="1"
                     Grid.Row="2" />

            <Button Command="{Binding GenerateReportCommand}"
                    Content="Generate Report" 
                    Width="100" 
                    HorizontalAlignment="Center" 
                    VerticalAlignment="Center"  
                    Grid.Column="2" />

            <Button Command="{Binding ArchiveReportCommand}"
                    Content="Archive Report" 
                    Width="100" 
                    HorizontalAlignment="Center" 
                    VerticalAlignment="Center"  
                    Grid.Column="2"
                    Grid.Row="1"/>

            <Button Style="{StaticResource circleButton}"
                    Command="{Binding ChangeColorCommand, Source={StaticResource CPVM}}"                     
                    Content="Change Theme" 
                    Width="100" 
                    HorizontalAlignment="Center" 
                    VerticalAlignment="Center"  
                    Grid.Column="2"
                    Grid.Row="2"/>

        </Grid>
    </GroupBox>
</Grid>

我可以通过剥离不重要的样式、视图模型等来重现您的问题

您只是缺少网格绑定中的源属性。
请注意,它是如何用于按钮而不是网格的

    <Grid Background="{Binding Path=State, 
        Converter={StaticResource enumToColorConvert}}">

需要:

    <Grid Background="{Binding Path=State, 
        Converter={StaticResource enumToColorConvert}, 
        Source={StaticResource CPVM}}">


为什么会有ViewModel对象<代码>和
?什么是
main视图
,我们是否需要查看
cameraproperties视图
的源代码?如何设置ViewModels/DataContext?@user1672994是因为绑定属性“State”位于该视图模型中,这就是我创建对的引用的方式it@V.LeonMainView本质上是一个视图类,它包含子视图类的名称空间。我认为视图模型/datacontext的设置如上面显示的MainWindow.xaml所示。@nwahs-我的问题是为什么两个不同的对象具有相同的视图模型?很抱歉,我忘了包括那个固定的部分,但我已经尝试过了,它仍然不起作用:(基本上,它是从状态变量开始的,它最初位于一个名为CameraListViewModel的大视图模型中,然后我决定将该逻辑的一部分拆分为它自己的用户控件和视图模型(CameraPropertyView&CameraPropertiesViewModel).现在,我从原始视图模型复制并粘贴了与此1按钮相关的代码,并注释掉了原始视图模型中的部分。我已检查它是否确实正在读取此新视图模型中的状态值。
    <Grid Background="{Binding Path=State, 
        Converter={StaticResource enumToColorConvert}}">
    <Grid Background="{Binding Path=State, 
        Converter={StaticResource enumToColorConvert}, 
        Source={StaticResource CPVM}}">