C# WPF转换器(MVVM)

C# WPF转换器(MVVM),c#,wpf,data-binding,mvvm,C#,Wpf,Data Binding,Mvvm,我需要一些转换器方面的帮助(我的WPF技能很低) 我有一个要更改填充笔刷属性的对象 这是“节点”对象的数据模板,我用粗体标记了要更改的值 (我删除了数据模板中一些不相关的数据以保持简单) 如您所见,节点内部有inputConnectors和outputConnectors(我在ViewModel中为它们提供了属性) 我正在尝试将节点填充绑定到此场景: 如果节点没有输入连接器或输出连接器,我希望填充颜色与有连接器时不同 我怎样才能做到这一点 尝试使用触发器。您可以在数据模板或网格上应用data

我需要一些转换器方面的帮助(我的WPF技能很低)

我有一个要更改填充笔刷属性的对象

这是“节点”对象的数据模板,我用粗体标记了要更改的值 (我删除了数据模板中一些不相关的数据以保持简单)


如您所见,节点内部有inputConnectors和outputConnectors(我在ViewModel中为它们提供了属性)

我正在尝试将节点填充绑定到此场景:

如果节点没有输入连接器或输出连接器,我希望填充颜色与有连接器时不同


我怎样才能做到这一点

尝试使用触发器。您可以在数据模板或网格上应用datatrigger,检查ItemsControl是否有任何项并设置填充颜色。

您可以使用属性
InputConnectors
OutputConnectors
,定义
视图模型,
HasConnectors
其中
HasConnectors
是从其他两个属性计算得出的属性

连接InputConnectors change和OutputConnectors上的事件
CollectionChanged
(如果整个集合可以更改,而不仅仅是其内容,则可能
PropertyChanged
)在
视图模型中
以便在触发
CollectionChanged
事件时,
视图模型
通过为
HasConnectors
触发
PropertyChanged
事件来处理事件

在您看来,使用1:1
值转换器将画笔绑定到
HasConnectors
,从
布尔值
画笔
,例如,如果为真,则为绿色,否则为红色。您可以不执行转换返回(返回
Binding.DoNothing

          <!-- Define a data-template for the 'NodeViewModel' class. -->    
        <DataTemplate
            DataType="{x:Type local:NodeViewModel}"
            >

                <Grid
                    MinWidth="120"
                    Margin="10,6,10,6"
                    SizeChanged="Node_SizeChanged"
                    >

                    <!-- This rectangle is the main visual for the node. -->

                    <Rectangle
                        Stroke="{StaticResource nodeBorderBrush}"
                        StrokeThickness="1.3"
                        RadiusX="4"
                        RadiusY="4"
                        **Fill="{StaticResource nodeFillBrush}"**
                        />

                        <!-- The name of the node. -->                
                        <TextBlock
                            Grid.Column="0"
                            Grid.ColumnSpan="3"
                            Grid.Row="0"
                            Text="{Binding Name}"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            />


                    <!-- Displays the node's input connectors. -->                
                        <ItemsControl
                            Grid.Column="0"
                            Grid.Row="2"
                            ItemsSource="{Binding InputConnectors}"
                            ItemTemplate="{StaticResource inputConnectorTemplate}"
                            Focusable="False"
                            />

                        <!-- Displays the node's output connectors. -->
                        <ItemsControl
                            Grid.Column="2"
                            Grid.Row="2"
                            ItemsSource="{Binding OutputConnectors}"
                            ItemTemplate="{StaticResource outputConnectorTemplate}"
                            Focusable="False"
                            />                 

        </DataTemplate>