【问题标题】:Getting the string value from a void on a class does not output correctly从类的 void 获取字符串值无法正确输出
【发布时间】:2021-04-27 09:39:05
【问题描述】:

我有一个类,稍后我将其作为 Listbox 上的 ItemsSource 进行挂钩。这个列表框有一个项目,它有一个图像绑定“{Binding LocalImage}”。问题是,当 Item 从 LocalImage 获取值时,它不应该返回 null 值。 void doesImageExistLocally 完美运行,并已在另一个项目上进行了测试。

从 Main void 单独调用它确实会正确输出图像的路径,因此它不是 void 的问题,而是类/列表框项获取值的问题。还需要注意字符串 Image 也被正确分配。 Console.WriteLine(Logic.doesImageExistLocally("imageurl"));

public class Test {

    private string _LocalImage;

    public string Image {get; set:}
    public string LocalImage
    {
        get { return _LocalImage; }
        set { _LocalImage = doesImageExistLocally(Image); }
     }
}

编辑:

Test test = new Test();
test.Image = "URL";
doesImageExistLocally(Image); // output = Images/name-of-picture.jpg
Console.WriteLine(test.LocalImage); // output = null;

作废代码:

public static string doesImageExistLocally(string imageURL)
    {
        Uri uri = new Uri(imageURL);

        string path = "Images/" + System.IO.Path.GetFileName(uri.LocalPath);
        Console.WriteLine(path);
        if (!File.Exists(path))
        {
            using (WebClient client = new WebClient())
            {
                client.DownloadFile(new Uri(imageURL), path);
            }
        }
        return path;

    }

【问题讨论】:

  • ImageExistLocally(Image) 返回什么?你怎么称呼你的阶级和你的财产。
  • @maytham-ɯɐɥʇʎɐɯ 我编辑了这个问题,这就是我制作课程并设置/获取值的方式。谢谢!
  • 你去@maytham-ɯɐɥʇʎɐɯ
  • 昨天在我的位置很晚才睡着,今天早上让你回答。

标签: c# class data-binding listbox


【解决方案1】:

在 Test 类中,永远不会设置 LocalImage 。使用此代码:

public class Test {

    private string _LocalImage;
    private string _Image;
    public string Image
    {
        get
        {
            return _Image;
        }
        set
        {
            _Image = value;
            _LocalImage = doesImageExistLocally(value);
        }
    }
    public string LocalImage
    {
         get { return _LocalImage; }
    }
 }

我想如果你像这样修改你的代码,那将是正确的。

Test test = new Test();
test.Image = "URL";
test.LocalImage = "URL"; // output = Images/name-of-picture.jpg
Console.WriteLine(test.LocalImage); // output = null;

【讨论】:

  • 你能解释一下你的代码和我的代码有什么区别吗?谢谢!
  • 这一行设置 {_LocalImage = doesImageExistLocally (Image);代码从不运行,区别就在这一行。我将此行移至图像字段
【解决方案2】:

问题是你永远不会主动设置LocalImage,即使你在属性中调用了一个方法。为了证明这一点,在设置行上设置一个调试器标记,您将永远不会点击它。

老实说,我不喜欢像你那样设置属性。 IMO你可以通过两种方式来做到这一点,一种是通过构造函数设置它,或者在类实例化之后设置它。通过这种方式,您可以更好地控制您的财产。如果您绝对想在设置 Image 属性后设置它,您可以按照其他答案。

按构造函数示例:

public Test()
{
    LocalImage = DoesImageExistLocally(Image);
}

public string Image { get; set; }
public string LocalImage { get; set; }

或者类实例化后的例子:

test.LocalImage = DoesImageExistLocally(test.Image);

现在,当您调用 test.LocalImage 时,您会得到预期的结果 "Images/name-of-picture.jpg"

享受吧。

【讨论】:

  • 感谢@maytham-ɯɐɥʇʎɐɯ的回复,祝你有美好的一天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 2016-08-28
  • 2017-04-04
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多