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