从视图模型更改wpf样式
本文关键字:wpf 样式 视图 模型 | 更新日期: 2023-09-27 18:00:35
我有一个数据模板:
<DataTemplate
DataType="{x:Type local:ConnectionViewModel}"
>
<!-- The connection is represented by a curved arrow. -->
<ca:CurvedArrow
StrokeThickness="2"
Points="{Binding Points}"
Fill="{StaticResource connectionBrush}"
Stroke="{StaticResource connectionBrush}"
/>
</DataTemplate>
这代表了我认为的所有连接器。我想做的是为视图模型中特定的特定连接器设置不同的填充和笔划。我怎样才能做到这一点?
您应该避免在视图模型中使用任何UI对象。
对于上面提到的用例,您可以使用Converters,并继续在视图模型中只包含业务对象级别的信息。
例如,Connection类可以持有enum : ConnectorType {Arrow,Circle,Rectangle}
的属性,然后可以编写一个转换器,将枚举类型转换为所需的画笔。下面的示例代码:
//Inside Resources. local=namespace where you have this converter
<local:ConnectorType2BrushConverter x:Key="ConnectorType2BrushConverter" />
....
<ca:CurvedArrow
StrokeThickness="2"
Points="{Binding Points}"
Fill="{Binding Path=ConnectorType, Converter={StaticResource ResourceKey=ConnectorType2BrushConverter}"
/>
....
public class ConnectorType2BrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var connectorType = (ConnectorType)value;
if (connectorType == ConnectorType.Arrow)
{
return new SolidColorBrush(Color.FromRgb(1, 1, 1));
}
else .....
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}