none
图片绑定问题 RRS feed

  • 问题

  • XAML绑定代码如下(使用ListBox+Stack Panel):

    <ListBox Margin="10,336,-10,0" Width="Auto" Name="lstBox" ItemsSource="{Binding}">
                <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                            <Image Stretch="Fill" Width="200" Height="200" Source="{Binding Source}"/> 
                        <TextBlock Width="Auto" Text="{Binding Text}"/>
                    </StackPanel>
                </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
    后台代码:
    这样可以运行出正常效果:
    Question:当我把“MyItem”类的public改成private,并且移动到MainPage类中,却无法绑定显示了,是为什么呢?

     

    namespace WindowsPhoneApplicationCSharp
    {
       
        /// <summary>
        /// 这是无法显示的代码
        /// </summary>
        public partial class MainPage : PhoneApplicationPage
        {
            private class MyItem
            {
                public ImageSource Source { getset; }
                public string Text { getset; }
            }
    //以下全部一样,我省略了………………
        }
    }

    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年9月30日 7:33

全部回复

  • 请把Source和Text 的定义放在MainPage中,而非放在MyItem类中即可。

     public partial class MainPage : PhoneApplicationPage
        {
           public ImageSource Source { get; set; }
           public string Text { get; set; }


    Cedar
    2011年10月1日 2:55
    版主
  • 因为在与XAML对应的MainPage类中需要定义名称为Source和Text 的数据源。


    Cedar
    2011年10月1日 3:32
    版主
  • 因为在与XAML对应的MainPage类中需要定义名称为Source和Text 的数据源。


    Cedar

    自定义类中不可以吗?

    我的自定义类只是private的就不可以,但是public就可以的。请仔细看我最初的详细描述。谢谢


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年10月1日 4:11
  • 哦,这样啊。

    没能为您合理的解释,很抱歉了。

     


    Cedar
    2011年10月1日 6:48
    版主
  • 哦,这样啊。

    没能为您合理的解释,很抱歉了。


    Cedar
    没有关系,谢谢了!

    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年10月1日 6:51
  • 我理解错了,我认为是MyItem类属性由Public变为Private,且MyItem类的定义移动至MaimPage中,最终导致Source和Text数据绑定失败。

    Sorry.


    Cedar
    2011年10月1日 6:53
    版主
  • 呵呵,不是。是:

    1)public 改成private。

    2)移动到MainPage中

    就不行了。
    我用Beta版本,是不是和这个有关,要不我下载正式版看看


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年10月1日 6:58
  • 为您提供我所采用的有关图片的数据模板的代码,希望能对您有所帮助。

    <DataTemplate x:Key="ImageTemplate">
                <StackPanel Margin="0,3,20,12">
                    <Border BorderBrush="Red" BorderThickness="2" Margin="0">
                        <Image
                   Source="{Binding BitMapSource}"
                   Stretch="None"
                            Height="173" Width="173"
                        />
                    </Border>
                    <TextBlock Text="{Binding Name}" HorizontalAlignment="Left" Margin="0,0,0,3" Foreground="White" />
                </StackPanel>
            </DataTemplate>

    在Panorama Item中的代码

    <controls:PanoramaItem Header="pictures" Name="CustomsItem">
                    <ListBox
                        Name="LandscapeListbox"
                        ItemsSource="{Binding Images, Mode=TwoWay}"
                        ItemTemplate="{StaticResource ImageTemplate}">
                        <ListBox.ItemsPanel>
                            <ItemsPanelTemplate>
                                <toolkit:WrapPanel />
                            </ItemsPanelTemplate>
                        </ListBox.ItemsPanel>
                    </ListBox>
                </controls:PanoramaItem>

    在MainPage.xaml.cs中定义绑定ListBox的Images,以及ImageTemplate的BitMapSource和Name。


    Cedar
    2011年10月1日 7:00
    版主
  • 不是为了解决这一个问题,升级SDK也是有必要的。请先升级吧。
    Cedar
    2011年10月1日 7:02
    版主
  • Images的定义方法

    public ObservableCollection<ImageItem> Images
            {
                get { return (ObservableCollection<ImageItem>)GetValue(ImagesProperty); }
                set { SetValue(ImagesProperty, value); }
            }

     

    BitMapSource和Name定义在ImageItem类中

        public class ImageItem
        {
            
            public ImageItem(string fileName)
            {
                BitmapImage imageTemp = new BitmapImage();
                Uri picUri = new Uri(fileName, UriKind.Relative);

                imageTemp.UriSource = picUri;
                BitMapSource = imageTemp;
                if (!string.IsNullOrEmpty(fileName))
                {
                    Name = System.IO.Path.GetFileNameWithoutExtension(fileName);
                }
            }

            public BitmapImage BitMapSource { get; set; }

            public string Name { get; set; }
        }

     

    重新审视我的代码,看来没能解释为什么public变为private,移动至MainPage类就无法成功实现数据绑定。而是也采用的是public方法,以及单独的类定义Image的DataTemplate。

     


    Cedar
    2011年10月1日 7:13
    版主