2013-10-17 86 views
0

我有一個類WPF組合框綁定更新多個文本框

class Names { 
public int id get; set;}; 
public string name {get ; set}; 
public string til {set{ 
if (this.name == "me"){ 
return "This is me"; 
} 
} 

我有一個列表(ListNames),其中包含名稱添加到它與組合框

<ComboBox SelectedValue="{Binding Path=id, Mode=TwoWay, 
UpdateSourceTrigger=PropertyChanged}" ItemsSource="{Binding 
ListNames}" DisplayMemberPath="name" SelectedValuePath="id" /> 

每一件事情的作品結合

我想在用戶選擇一個項目時在另一個標籤字段上顯示「提示」。

是否有可能?

幫助!

+0

你的意思是工具提示?或您的Names類中的'直接'屬性?應該提示嗎?關閉主題,但我會將您的班級重命名爲姓名,公共房產應以大寫字母開頭。你在使用MVVM嗎?在您的ViewModel中實現'INotifyPropertyChanged'可以解決您的問題。 –

+0

我使用INotifyPropertyChanged而不是MVVM – LeBlues

+0

就像@Miiite建議使用MVVM模式會使事情變得更容易。將標籤文本綁定到ViewModel中的選定項目。 –

回答

1

我假設你正在使用MVVM。

您需要在窗口的viewmodel中創建一個類型爲「Names」的屬性「CurrentName」,並綁定到ComboBox SelectedItem屬性。 此屬性必須引發NotifyPropertyChanged事件。

然後,將您的標籤字段綁定到此「CurrentName」屬性。 當SelectedIem屬性將在組合框上更改時,將更新標籤字段。

0

事情是這樣的: 模型:

public class Names 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Tip { 
     get 
     { 
      return Name == "me" ? "this is me" : ""; 
     } 
    } 
} 

您的視圖模型:

public class ViewModel : INotifyPropertyChanged 
{ 
    private ObservableCollection<Names> _namesList; 
    private Names _selectedName; 

    public ViewModel() 
    { 
     NamesList = new ObservableCollection<Names>(new List<Names> 
      { 
       new Names() {Id = 1, Name = "John"}, 
       new Names() {Id = 2, Name = "Mary"} 
      }); 
    } 

    public ObservableCollection<Names> NamesList 
    { 
     get { return _namesList; } 
     set 
     { 
      _namesList = value; 
      OnPropertyChanged(); 
     } 
    } 

    public Names SelectedName 
    { 
     get { return _selectedName; } 
     set 
     { 
      _selectedName = value; 
      OnPropertyChanged(); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    [NotifyPropertyChangedInvocator] 
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

最後你的觀點:

<Window x:Class="Combo.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:Combo="clr-namespace:Combo" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.DataContext> 
    <Combo:ViewModel/> 
</Window.DataContext> 
<StackPanel> 
    <ComboBox ItemsSource="{Binding Path=NamesList}" DisplayMemberPath="Name" 
       SelectedValue="{Binding Path=SelectedName}"/> 
    <Label Content="{Binding Path=SelectedName.Name}"/> 
</StackPanel>