Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据绑定GridView C#windows应用商店应用程序_C#_Windows Store Apps - Fatal编程技术网

数据绑定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;
    }
}