【问题标题】:LINQ to Twitter setting users account image c#LINQ to Twitter 设置用户帐户图像 c#
【发布时间】:2012-09-02 07:15:59
【问题描述】:

我正在尝试获取用户 profileImageURl 并将其绑定到图像。我有以下 C# 代码:

namespace IIVVYTwitter
{
    public sealed partial class MainPage : Page
    {
        public MainPage()
        {
            this.InitializeComponent();
            DataContext = new ViewModel(this);
        }
    }

    class ViewModel : INotifyPropertyChanged
    {

        public User AccountImageUrl { get; set; }

        readonly Page page;

        public ViewModel(Page page)
        {
            this.page = page;
            LoadAccount = new TwitterCommand<object>(LoadAccountHolder);
        }


        public TwitterCommand<object> LoadAccount { get; set; }

        void LoadAccountHolder(object obj)
        {
            PinAuthorizer auth =
            new PinAuthorizer
            {
                Credentials = new LocalDataCredentials()
            };

            if (auth == null || !auth.IsAuthorized)
            {
                page.Frame.Navigate(typeof(oAuth));
                return;
            }

            var twitterCtx = new TwitterContext(auth);

            var accounts =
                from acct in twitterCtx.Account
                where acct.Type == AccountType.VerifyCredentials
                select acct;

            Account account = accounts.SingleOrDefault();
            LinqToTwitter.User user = account.User;

            new User
                 {
                     AccountImageUrl = user.ProfileImageUrl
                 };


            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs("AccountImageUrl"));
            }
        }

    }
}

与此 XAML 链接:

<Page
    x:Class="IIVVYTwitter.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:IIVVYTwitter"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

<Grid>
    <Button Command="{Binding LoadAccount}">
         <Border>
              <Image x:Name="accountPicture" Source="{Binding AccountImageUrl}" />
         </Border>
    </Button>
</Grid>
</Page>

当我通过单击按钮运行命令时,代码运行但图像的源没有更新。

我很确定我绑定源数据的方式有缺陷。

提前致谢。

【问题讨论】:

    标签: c# xaml data-binding windows-8 linq-to-twitter


    【解决方案1】:

    我没有看到您在任何地方为页面设置DataContext。如果没有正确定义的DataContext,您正在使用的绑定将无法解析为任何数据对象。一个简单的例子是在 OnNavigatedTo 方法或页面的构造函数中,您需要执行以下操作:

    this.DataContext = new ViewModel()
    

    或类似的东西。根据您希望如何处理视图模型创建、生命周期等,有不同的方法来连接数据上下文,但希望这能让您走上正确的道路。在您的代码中,您还可以在构造函数中调用page.DataContext = this;

    更新:您还需要在触发 PropertyChanged 事件时修复代码。你有

    if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("ImageUrl"));
                }
    

    应该是

    if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("AccountImageUrl"));
                }
    

    请注意为属性名称传递的字符串的更改。您正在为不存在的属性触发更改事件。

    更新 #2:您正在从 AccountImageUrl 返回一种用户类型。您应该返回实际的 http url 字符串,而不是自定义类型。如果用户有一个指向 http Url 的属性,您可以将 Xaml 绑定更新为 AccountImageUrl.PropertyThatContainsRealUrl

    更新#3: 在您的代码中,您有

    new User
                     {
                         AccountImageUrl = user.ProfileImageUrl
                     };
    

    这是在新的用户对象上设置 AccountImageUrl。但是,您绑定到 ViewModel 的 AccountImageUrl。在某些时候,您必须将 AccountImageURl 设置为图像 url 字符串并在 AccountImageURL 上引发 PropertyChanged。因此,无论是在创建新用户之前还是之后,您都应该说 this.AccountImageUrl = user.ProfileImageUrl. 希望我仍然正确地关注您的代码以及您在 cmets 中所做的更改。

    【讨论】:

    • 刚刚更新了问题以显示这一点,但我已经设置了数据上下文,通过 DataContext = new ViewModel(this);
    • 更正了为属性名称传递的字符串,但仍然没有运气。我确定 LoadAccountHolder() 在按钮单击时运行良好,但在某处绑定到图像的源 URL 不起作用。
    • 感谢您的坚持。不过还是有点卡住了。所以我改变了:新用户 { AccountImageUrl = user.ProfileImageUrl };收件人:字符串 AccountImageUrl = user.ProfileImageUrl;还更改了: public User AccountImageUrl { get;放; } To: public string AccountImageUrl { get;放;提前致谢!
    • 代码有点难以理解,但是,我想我看到了另一个错误。请参阅更新 #3 :)
    猜你喜欢
    • 2013-07-23
    • 2023-02-15
    • 2013-03-10
    • 2012-11-03
    • 2014-02-17
    • 2011-12-07
    • 2017-10-15
    • 2011-04-25
    • 1970-01-01
    相关资源
    最近更新 更多