Если вы хотите, чтобы было немного легче смотреть, вы всегда можете поставить:
Time = 72.345
Hours = Time
Minutes = 60 * (Hours % 1)
Seconds = 60 * (Minutes % 1)
print("%d:%02d:%02d" % (Hours, Minutes, Seconds))
Помещение% d в строку обрезает вам любые десятичные знаки.
В 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>
Я просто боролся с подобной проблемой. Мой состоит из поля комбинированного списка, которое отображается для каждого 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 поля комбинированного списка. Если Вы получаете данные из веб-сервиса, который имеет идентификаторы или возражает для представления объекта для поля комбинированного списка, необходимо повторно сослаться на них для указания на фактический набор.
На очень прохладных вещей можно сделать с Silverlight, должен использовать Атрибут тега для хранения ссылки на объект, с которым это связывается.
Первый, в Вашем классе, объявляют, что свойство как это
public IMyObject Current
{
get {return this;}
}
Тогда на управлении, генерирующем событие в Вас, может получить ссылку на объект
var fe= (FrameworkElement) sender;
var src = fe.Tag as IMyObject;
Поэтому теперь, когда у меня есть объект, это разумно для объекта иметь ссылку на ее родителя таким образом, Вы связываете с
Current.Parent.QuestionType
Если вы пытаетесь сделать это с помощью DataForm, тот же метод, показанный Roboblob, не работает.