数据绑定GridView C#windows应用商店应用程序
我有一个如下定义的数据模板数据绑定GridView C#windows应用商店应用程序,c#,windows-store-apps,C#,Windows Store Apps,我有一个如下定义的数据模板 <DataTemplate x:Key="IconTextDataTemplate"> <StackPanel Orientation="Horizontal" Width="220" Height="60"> <Border Background="#66727272" Width="40" Height="40" Margin="10"> <Image
<DataTemplate x:Key="IconTextDataTemplate">
<StackPanel Orientation="Horizontal" Width="220" Height="60">
<Border Background="#66727272" Width="40" Height="40" Margin="10">
<Image Source="/SampleImage.png" Height="32" Width="32" Stretch="UniformToFill"/>
</Border>
<StackPanel Orientation="Vertical" VerticalAlignment="Center">
<TextBlock Text="{Binding Path=Title}" Margin="10,0,0,0" Width="170" Height="20" TextTrimming="WordEllipsis" />
<TextBlock Text="{Binding Path=NumberOfPhotos}" Margin="10,0,0,0" Width="170" Height="20" TextTrimming="WordEllipsis"/>
</StackPanel>
</StackPanel>
</DataTemplate>
object setCollection是具有NumberOfPhotos和Title属性的对象集合,因此绑定
<TextBlock Text="{Binding Path=Title}" Margin="10,0,0,0" Width="170" Height="20" TextTrimming="WordEllipsis" />
<TextBlock Text="{Binding Path=NumberOfPhotos}" Margin="10,0,0,0" Width="170" Height="20" TextTrimming="WordEllipsis"/>
因此,在计算时,ImageSource变为
/files/thumbnails/titleOfObject.png
其中titleOfObject等于此处的值
<TextBlock Text="{Binding Path=Title}" Margin="10,0,0,0" Width="170" Height="20" TextTrimming="WordEllipsis" />
如何实现这一点?您最好将绑定对象视为ViewModels。从概念上讲,这意味着ViewModel对象的工作是为视图准备数据。这包括将标题绑定到源属性等内容。因此,在对象(或派生对象,或对象的正式ViewModel)上,创建一个为您执行该计算的属性
public string TitleImageSource
{
get
{
return string.Format(@"/files/thumbnails/{0}{1}", this.Title, fileType);
}
}
然后绑定到图像中的属性
另一种方法是为绑定创建转换器。转换器可能类似于:
public sealed class ImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return string.Format(@"/files/thumbnails/{0}{1}", value, parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return string.Empty;
}
}
然后在图像标签的源绑定上引用该转换器。我个人不太喜欢的替代方案(但可以承认这是个人偏见)就是创建一个转换器,该转换器的功能大致相同,并将其应用于绑定。因此,答案是使用为您计算格式的属性为绑定对象创建一个新对象?我想到了这一点,但由于基类是密封的,所以这相当困难,我必须重写绑定类。您提到的另一种方法我不熟悉,我将查找ViewModels。如果您不能自己更改对象,则可以。
/files/thumbnails/titleOfObject.png
<TextBlock Text="{Binding Path=Title}" Margin="10,0,0,0" Width="170" Height="20" TextTrimming="WordEllipsis" />
public string TitleImageSource
{
get
{
return string.Format(@"/files/thumbnails/{0}{1}", this.Title, fileType);
}
}
public sealed class ImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return string.Format(@"/files/thumbnails/{0}{1}", value, parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return string.Empty;
}
}