2012-04-06 39 views
0

私はTextBoxをクラスのCollectionからの値にバインドしようとしています。これはどうすればいいですか?条件付きバインディング?

データ:

Name, Filter 
A , 1 
B , 2 
C , 3 

今、私はどこ名= A.

XAML ColumnFilter

public class Model 
{ 
    private ObservableCollection<DataGridColumnFilter> _filters = new ObservableCollection<DataGridColumnFilter>(); 
    public ObservableCollection<DataGridColumnFilter> Filters { get { return _filters; } set { _filters = value; } } 
} 
public class DataGridColumnFilter 
{ 
    public string Name { get; set; } 
    public string Filter { get; set; } 
} 
+0

あなたはこの魔法の結合を行うために何を期待していますか?どのSLのバージョンを使用していますか? – Gabe

+0

編集された質問 –

答えて

2
のリストにバインド

<TextBlock Text="{Binding [Filters.??.Filter where name =??], UpdateSourceTrigger=PropertyChanged}"></TextBlock> 

フィルターと私のTextBlockを埋めるためにしたいです

あなたはコンバータをSE:

<Page.Resources> 
    <Samples:FilterConverter x:Key="FilterConverter"/> 
</Page.Resources> 

<Grid> 
    <TextBox Text="{Binding Path=Filters, 
     Converter={StaticResource FilterConverter}, 
     ConverterParameter=a, Mode=OneWay}"/> 
</Grid> 


public class ConditionalBindingVM 
{ 
    public ConditionalBindingVM() 
    { 
     Filters = new ObservableCollection<ColumnFilter> 
         { 
          new ColumnFilter {Name = "a", Filter = "filter A"}, 
          new ColumnFilter {Name = "b", Filter = "filter B"}, 
          new ColumnFilter {Name = "c", Filter = "filter C"}, 
         }; 
    } 

    public IEnumerable<ColumnFilter> Filters { get; private set; } 
} 

public class ColumnFilter 
{ 
    public string Name { get; set; } 
    public string Filter { get; set; } 
} 

public class FilterConverter : IValueConverter 
{ 
    #region Implementation of IValueConverter 

    public object Convert(object value, Type targetType, 
          object parameter, CultureInfo culture) 
    { 
     var filters = (IEnumerable<ColumnFilter>) value; 
     var name = (string) parameter; 

     var filter = filters.SingleOrDefault(f => f.Name == name); 

     return filter != null ? filter.Filter : string.Empty; 
    } 

    public object ConvertBack(object value, Type targetType, 
      object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 
0

は、KeyUpイベントを使用し、(System.Linqのを使用して)次の操作を行います。

myTextBox.Text= Filters.FirstOrDefault(c=> c.Name.StartsWith(myTextBox.Text)).Filter;