gpt4 book ai didi

c# - 如何绑定(bind)到 API 类实例的 get-only 属性?

转载 作者:行者123 更新时间:2023-12-03 10:44:17 25 4
gpt4 key购买 nike

可能是我对这个问题的表述不正确(“如何绑定(bind)到 API 类实例的 get-only 属性?”)但这是我的问题:
我正在创建 powerpoint vsto 加载项,我需要将具体幻灯片的 SlideIndex 属性绑定(bind)到 windows 窗体上的文本框。 SlideIndex 属性只有 get 访问器。我发现在绑定(bind)的情况下我需要使用 mvvm。根据 mvvm 主题的示例,我从 NuGet Packege Manager 将 MvvmLightLibs 安装到我的解决方案中,并决定用这种方式“包装”幻灯片对象:

public class SlideWraper: ViewModelBase
{
private PowerPoint.Slide Sld;
public int SlideIndex
{
get
{
return Sld.SlideIndex;
}
set
{
RaisePropertyChanged(() => Sld.SlideIndex);
}
}

public SlideWraper(PowerPoint.Slide sld)
{
Sld=sld;
}
}

这是我的绑定(bind)创建代码:
...
PowerPoint.Slide ConcreteSlide=this.Application.ActivePresentation.
Slides.FindBySlideID(257);
SlideWraper MyWraper=new SlideWraper(ConcreteSlide);
MyTextBox.DataBindings.Add(new Binding("Text", MyWraper, "SlideIndex"));
...

但是这种实现仅在程序开始时用正确的幻灯片索引填充文本框。当我替换幻灯片(幻灯片索引已更改)时,MyTextBox.Text 没有更改。

如何绑定(bind)到幻灯片的 get-only 属性?

最佳答案

这里有几个选项。如果 PowerPoint.Slide支持INPC那么你应该直接暴露它......

private PowerPoint.Slide Sld;
public PowerPoint.Slide Slide
{
get {return Sld;}
set {this.Sld = value; RaisePropertyChanged(() => Slide);}
}

...然后在 XAML 中绑定(bind)到 Slide.SlideIndex .

如果 PowerPoint.Slide 不支持 INPC,那么您需要在 View 模型中创建一个常规 int 属性并安排 PowerPoint.Slide 更新该属性以响应其 SlideIndex。值变化。

最后,如果您知道 SlideIndex 刚刚更新,那么您可以调用 `RaisePropertyChanged("Slide")',这可能会很慢,因为它会导致与 Slide 属性的所有绑定(bind)更新,但有时它是唯一的选择。

无论哪种方式,自动更新都不能自己神奇地工作,PowerPoint.Slide 需要有一些机制来通知程序的其余部分它的 SlideIndex属性变了。

关于c# - 如何绑定(bind)到 API 类实例的 get-only 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35000878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com