【问题标题】:Binding to member of Listbox item绑定到列表框项的成员
【发布时间】:2013-10-26 12:59:39
【问题描述】:

我不知道我是否会提供足够的信息,但我遇到了问题。 我将 ObservableCollection 绑定到普通列表框,一切正常,但 ImageInfo 有一个成员(源),其中包含图像所在的位置,我需要列表框中当前选定项目的源成员。但是,我似乎不知道从哪里开始。

【问题讨论】:

  • 问题不清楚,请补充详情
  • 你的意思是,你有 ImageInfo 类,它有源属性,你想绑定到它?
  • 将 SelectedItem 绑定到 ViewModel 的属性。

标签: c# wpf data-binding listbox


【解决方案1】:

也许您的 xaml 中需要 <Image Source="{Binding ElementName=myListbox, Path=SelectedItem.Source}"> 之类的内容。其他与绑定相关的例子和解释在这里https://stackoverflow.com/a/1069389/1606534

【讨论】:

  • 谢谢,我只是觉得我不能用“。”在“SelectedItem.Source”中访问成员
【解决方案2】:

您是否在正常模式下绑定到如下属性:EG: ?如果是这样,您真的只需要为“selecteditem”公开一个公共属性(如果有记忆的话)。从我对 WPF 的理解来看,Observable Collection 的真正强大之处在于事情是如何实时变化的,您可以在实现 INotifyPropertyChanged 或 INotifyCollectionChanged 时注意到这些变化。

<combobox x:Name="mycombo" itemssource="{Binding itemsource}" 
          selecteditem="{Binding SelectedItem}" />

ViewModel 属性:

public string SelectedItem { get; set; }

但是,如果您希望您的属性在更改时被注意到,您需要实现 INotifyPropertyChanged。通常,在我工作过的工作室中,他们在类的顶部设置一个私有变量,然后在 get 集中使用它,然后在绑定中使用公共属性。

public class example : INotifyPropertyChanged
{
    private string _SelectedItem;


    public string SelectedItem 
    {
        get { return _SelectedItem; }
        set
        {
           _SelectedItem = value;

           RaisePropertyChanged("SelectedItem");
         }
    }

    public event PropertyChangedEventHandler PropertyChanged;

     protected void RaisePropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new   System.ComponentModel.PropertyChangedEventArgs(propertyName));
    }

    public void DoSomething()
    {
         Messagebox.Show("I selected: " + SelectedItem);
    }
}

【讨论】:

    猜你喜欢
    • 2015-02-02
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2015-04-04
    • 2013-01-27
    • 2013-01-29
    • 1970-01-01
    相关资源
    最近更新 更多