Родитель доступа datacontext в поле списка в Silverlight

Если вы хотите, чтобы было немного легче смотреть, вы всегда можете поставить:

Time = 72.345

Hours = Time
Minutes = 60 * (Hours % 1)
Seconds = 60 * (Minutes % 1)

print("%d:%02d:%02d" % (Hours, Minutes, Seconds))

Помещение% d в строку обрезает вам любые десятичные знаки.

24
задан James_2195 22 December 2008 в 08:25
поделиться

4 ответа

В Silverlight 3 и выше вы можете использовать элемент для привязки элемента и указывать на элемент управления DataContext, а затем некоторое свойство в моем примере его порогового значения.

Итак, имя вашего управления (например, в моем примере его x: name = "Control")

<UserControl x:Class="SomeApp.Views.MainPageView" x:Name="control" >

Тогда внутри этого элемента управления в вашем списке ItemTemplate вы можете получить доступ к родительскому DataContext, как это:

    <ListBox ItemsSource="{Binding Path=SomeItems}" >
        <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding ElementName=control, Path=DataContext.Threshold}"/>
            </StackPanel>
        </DataTemplate>
       </ListBox.ItemTemplate>         
       </ListBox>
55
ответ дан 28 November 2019 в 22:51
поделиться

Я просто боролся с подобной проблемой. Мой состоит из поля комбинированного списка, которое отображается для каждого listitem. DataContext верхнего уровня связывается с моим viewmodel (MVVM) и похож на это:

class ViewModel{
    ObservableCollection<ComboboxListItemType> DataForTheComboBoxList;
    ObservableCollection<MyDataType> DataForTheListBox;
    ...
}

, поскольку поле комбинированного списка в ItemTemplate (=DataTemplate) для поля списка, DataContext для каждого элемента списка установлен на соответствующий объект в DataForTheListBox, поле комбинированного списка больше не может видеть DataForTheComboBoxList, в котором это нуждается от DataContext верхнего уровня.

Мой (грязный, ужасный) обходное решение включает установку полного списка поля комбинированного списка на каждом объекте в списке, таким образом, это становится видимым к DataContext в этом элементе списка.

Первый Вы делаете частичный класс для своего типа данных поля списка. (Обычно это будет прибывать из сервисной ссылки, таким образом, Вы наклоните касание сгенерированный код непосредственно, потенциально не теряя ее). Этот частичный класс содержит новое свойство, относящееся к Вашему типу элемента списка поля комбинированного списка:

public partial class MyDataType
{
    private ObservableCollection<ComboboxListItemType> m_AllComboboxItems;
    public ObservableCollection<ComboboxListItemType> AllComboboxItems
    {
        get { return m_AllComboboxItems; }
        set
        {
            if (m_AllComboboxItems != value)
            {
                m_AllComboboxItems = value;
                RaisePropertyChanged("AllComboboxItems");
            }
        }
    }
}

Следующий необходимо установить это свойство на каждом элементе в наборе DataForTheListBox

// in ViewModel class
foreach(var x in this.DataForTheListBox)
{
    x.AllComboboxItems = this.DataForTheComboBoxList;
}

Затем обратно в XAML:

<DataTemplate x:Key="ListBoxItemTemplate">
    ...
    <Combobox
        ItemsSource="{Binding AllComboboxItems}"
        SelectedItem="{Binding CurrentBlah}"/>
</DataTemplate>

не забывают, что, чтобы поле комбинированного списка правильно отобразило текущий объект, выбранный пункт должен относиться к фактический объект в ItemsSource поля комбинированного списка. Если Вы получаете данные из веб-сервиса, который имеет идентификаторы или возражает для представления объекта для поля комбинированного списка, необходимо повторно сослаться на них для указания на фактический набор.

1
ответ дан geofftnz 16 October 2019 в 08:21
поделиться

На очень прохладных вещей можно сделать с Silverlight, должен использовать Атрибут тега для хранения ссылки на объект, с которым это связывается.

Первый, в Вашем классе, объявляют, что свойство как это

public IMyObject Current 
{
  get {return this;}
}

Тогда на управлении, генерирующем событие в Вас, может получить ссылку на объект

var fe= (FrameworkElement) sender;
var src = fe.Tag as IMyObject;

Поэтому теперь, когда у меня есть объект, это разумно для объекта иметь ссылку на ее родителя таким образом, Вы связываете с

Current.Parent.QuestionType
1
ответ дан Jason Plank 16 October 2019 в 08:21
поделиться

Если вы пытаетесь сделать это с помощью DataForm, тот же метод, показанный Roboblob, не работает.

Этот вопрос может содержать полезную информацию

1
ответ дан 28 November 2019 в 22:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: