Значение привязки XAML из другой коллекции - PullRequest
0 голосов
/ 04 марта 2012

Я действительно ищу в Интернете и не могу найти ответ.

Мне сложно описать, что я пытаюсь сделать.Возможно, именно поэтому я не смог найти ответ в Stackoverflow и Google.

У меня есть ListBox на моей странице, которая связана с ObservableCollection<Model>.Это Model имеет свойство с Id другой модели.Существует также Dictionary<int,SecondModel>, содержащий реализованные вторые модели.

Я мог бы , а не добавить свойство со второй моделью в первую модель, поскольку это сторонняя библиотека.

Можно ли получить свойство Name из реализованного SecondModel с использованием коллекции?

Text="{Binding ???}"

Образец

public class Model
{
    public int Id { get; set; }
    public int SecondModelId { get; set; }
}

public class SecondModel
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class SomeOtherModel
{
    public Dictionary<int,SecondModel> SecondModelCollection{ get; set; }
}

Ответы [ 2 ]

1 голос
/ 05 марта 2012

Мне нравится решение Зорткуна.Вы также можете использовать IValueConverter

<UserControl.Resources>
  <my:SecondValueConverter x:Name="SecondValueLookup" />
</UserControl.Resources>
  :
  :
<TextBlock Text="{Binding SecondValueId, 
                  Converter={StaticResource SecondValueLookup}, 
                  ConverterParameter=Name}" />
1 голос
/ 04 марта 2012

Если вы не можете поиграть с кишками класса Model, я предложу заключить две модели в нечто вроде:

public class JoinedModel
{
  public Model FirstModel{ get; set; }
  public Model SecondModel{ get; set; }
}

 var secondModelCollection = SomeOtherModel.SecondModelCollection.Values;

 var joinedCollection = from model in firstModelCollection
                              join secondModel in secondModelCollection 
                              on model.SecondModelId equals secondModel.Id
                              select new JoinedModel() { FirstModel = model, SecondModel = secondModel };

Вы можете установить joinCollection в качестве источника данных вместо firstModelCollection , которая в вопросе обозначается как ObservableCollection<Model>.

Затем в привязке можно выполнить двухуровневое связывание , например Text="{Binding SecondModel.Name}"

... но я предполагаю, что вы можете изменить источник данных своего взгляда, я надеюсь, что вы можете:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...