【问题标题】:Partial Image source binding with extra text in windows phoneWindows phone 中带有额外文本的部分图像源绑定
【发布时间】:2014-06-08 19:41:07
【问题描述】:

我想将 USER ID 绑定到图像源,但绝对链接必须存在。怎么会这样?

所以我想要:www.aaaa.com/userid.jpg 那里 我的代码在这里。

 <phone:LongListSelector x:Name="userfeed" CacheMode="{x:Null}" Margin="-20,0,-20,10" LayoutMode="List"  Background="white" BorderBrush="#FFE6E6E6" Foreground="#FF171717" >
                            <phone:LongListSelector.ItemTemplate >
                                <DataTemplate>
                                    <StackPanel Grid.Row="0" Margin="15,5,0,0">

                              <image x:name="test" source="{binding id}" />  // <- i want here absolute path how can i bind/type extra text?

                                    </StackPanel>

                                </DataTemplate>
                            </phone:LongListSelector.ItemTemplate>
                        </phone:LongListSelector>

【问题讨论】:

    标签: c# .net wpf azure windows-phone-8


    【解决方案1】:

    由于您没有发布所有代码,因此我必须推测 User ID 属性的外观,但我会做这样的事情...

    这是你的 xaml

    <image x:name="test" source="{binding ImageSource}" /> 
    

    这就是您添加到 CS 文件中的内容

    public class YourClass : INotifyPropertyChanged
    {
    private String _id;
    
    public String id
    {
       get{
            return _id;       
       }
       set{
           _id= value; OnPropertyChanged("id");OnPropertyChanged("ImageSource");
       }
    }
    
    
    private String _RootURL;
    
    public String RootURL
    {
       get{
            return _RootURL;     
       }
       set{
           _RootURL = value; OnPropertyChanged("RootURL"); OnPropertyChanged("ImageSource");
       }
    }
    
    private String _ImageSource;
    
    public String ImageSource
    {
       get{
            return RootURL+ id;       
       }
    }
    
    PropertyChangedEventHandler PropertyChanged;
    
    void OnPropertyChanged(String prop){
      PropertyChangedEventHandler handler = PropertyChanged;
      if(handler!=null){
        PropertyChanged(this,new PropertyChangedEventArgs(prop));
      }
    }
    }
    

    根据 Clemens 的回复编辑

    我想针对绿色开发人员定制这个原始答案。然而,正如 Clemens 在 cmets 中指出的那样,这不是技术上的方法。我发布的更新解决方案比转换器更好。转换器通常用于将数据库值或其他随机的、非用户友好的数据转换为有用的数据。例如,如果您的数据库表中有 0 和 1,但您想在它们的位置显示蓝色或橙色。这是使用转换器的绝佳理由。

    另一方面,使用转换器连接字符串是一种不好的使用方式。如果您必须更改 URL,则必须转到转换器来执行此操作。我的回答优越的原因是因为它允许您从任何您想要的来源设置根 URL。例如数据库或 Web JSON 响应。然后,将您的 Image 绑定到将它们连接在一起的 ImageSource 属性。

    【讨论】:

    • 非常好的主意,谢谢,它在类和 longlistselector 中,所以当类反序列化和列表绑定到 longlistselector 时,源代码会这样做吗?对于每个不同的 ID?
    • 请参阅here 为什么这不是这样一个好主意。为 URL 添加 另一个(只读)属性或使用绑定转换器。
    • @user3565698 MSDN 上的在线文档:Binding.Converter
    【解决方案2】:

    给定一个具有UserId 属性的视图模型类,您可以简单地添加另一个只读属性,例如UserImageUrl

    public class User
    {
        private string userId;
    
        public string UserId
        {
            get { return userId; }
            set
            {
                userId = value;
                OnPropertyChanged("UserId");
                OnPropertyChanged("UserImageUrl");
            }
        }
    
        public string UserImageUrl
        {
            get { return string.Format("http://www.aaaa.com/{0}.jpg", userId); }
        }
    }
    

    然后像这样绑定到那个新属性

    <Image Source="{Binding UserImageUrl}" />
    

    【讨论】:

    • 硬编码 URL 根是一个坏主意。如果它动态变化或从数据库中提取怎么办?
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 2013-09-23
    • 2019-07-26
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    相关资源
    最近更新 更多