如何将Silverlight 4 XAML中的Border绑定到C#ViewModel代码中的变量

本文关键字:C#ViewModel 代码 变量 绑定 Border Silverlight 中的 XAML | 更新日期: 2023-09-27 18:25:05

我知道如何将Silverlight XAML边框的属性Height绑定到C#代码中的变量。但是,如何将Border项本身绑定到C#代码中Border类型的变量?

假设在我的C#代码(ViewModel,而不是代码隐藏)中,我有一个名为myBorder的Border类型的变量。我想在我的XAML中做这样的事情:

<Border Source="{Binding myBorder}"/>

但是Source、Content等都不是可设置的Border元素的属性,所以我该怎么做呢?

如何将Silverlight 4 XAML中的Border绑定到C#ViewModel代码中的变量

您的XAML应该类似于以下

<Border Background="{Binding Path=Background}" DataContext="{Binding myBorder}" Height="{Binding Path=Height}" Width="{Binding Path=Width}"/>

在您的vm 中

myBorder = new Border();
            myBorder.Height = 20;
            myBorder.Width = 30;
            myBorder.Background = Brushes.Blue;

请记住,myBorder应声明为Property,而不是字段

由于您使用的是ViewModel,我认为您正试图遵循MVVM模式。在这种情况下,ViewModel应该保存影响边界选择的数据(布尔值,如IsSelected,枚举等),并且应该使用IValueConverter来实现这一点。你的XAML看起来像:

<Border BorderBrush="{Binding IsSelected,Converter={StaticResource BlueIfTrueRedIfFalseConverter}}"/>

要实现ValueConverter,请参阅以下链接:http://timheuer.com/blog/archive/2008/07/30/format-data-in-silverlight-databinding-valueconverter.aspx

这意味着您现在可以分离关注点。ViewModel不必关心它将如何渲染,这是View的工作。