[英]Is there such built-in control in silverlight?
我有一個帶有ID和描述的項目列表(如果需要,我可以引入鍵值集合)。 我需要的是綁定到viewmodel id屬性的控件,但是在其上顯示了相應項/對的描述。 我知道的最接近的示例是組合框,在其中設置了DisplayMemberPath和SelectedValue / SelectedValuePath,但是我不需要下拉菜單。 那么,Silverlight中是否有任何內置控件可用於此目的?
(當然,我可以自己編寫一個代碼,這很容易,我什至可以為viewmodel放置一些邏輯以獲取所需的對並將其描述綁定到簡單的textblock上)
編輯:為了說明我需要什么功能,我編寫了簡單的示例類。 它實際上滿足了我的需求,但是我仍然想知道是否可以使用內置控件 。
public class CollectionItemDisplayControl:TextBox
{
public CollectionItemDisplayControl()
{
IsReadOnly = true;
}
public string SelectedID
{
get { return (string)GetValue(SelectedIDProperty); }
set { SetValue(SelectedIDProperty, value); }
}
// Using a DependencyProperty as the backing store for SelectedID. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SelectedIDProperty =
DependencyProperty.Register("SelectedID", typeof(string), typeof(CollectionItemDisplayControl), new PropertyMetadata(new PropertyChangedCallback(OnSelectedIDChangedStatic)));
private static void OnSelectedIDChangedStatic(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
CollectionItemDisplayControl originator = d as CollectionItemDisplayControl;
if (originator != null)
{
originator.OnSelectedIDChanged(e);
}
}
private void OnSelectedIDChanged(DependencyPropertyChangedEventArgs e)
{
string description = String.Empty;
string value = e.NewValue as string;
if (value != null)
{
foreach (var item in _items)
{
if (item.UniqueID == value)
{
description = item.Description;
break;
}
}
}
Text = description;
}
private IDataCollection _viewModel;
public IDataCollection ViewModel
{
get { return _viewModel; }
set
{
_viewModel = value;
if (_viewModel != null)
{
_items = _viewModel.Items;
}
}
}
private ObservableCollection<IUnique> _items = new ObservableCollection<IUnique>();
}
ItemClass包含兩個屬性:ID和Description。 我可以將此控件放在頁面上,綁定項目,並單向綁定SelectedID。
編輯2:好吧,我沒有制作SelectedID DependencyProperty,所以綁定將不起作用,但是我會立即修復它
編輯3:第一個片段是草率的並且不能正常工作,所以我修復了它。
如果我理解正確,
您只需要實現正確的綁定即可。
(您確實需要一個列表?不僅是單個項目,即使單個項目與任何控件都相似)
將列表綁定到例如ItemsControl
。
將ItemsSource
設置為您list of items
然后在您的Item
上覆蓋ToString
以ToString
它確實是“您的”。 如果沒有,您可以自己包裝。
在ToString輸出中,無論顯示什么內容,例如描述。
這是最快的解決方案,您也可以根據需要制作項目模板。
編輯:
只需將所有內容放入視圖模型並綁定到它-TextBox,即
Text={Binding SelectedText}
例如
...在您的視圖模型中添加SelectedText
和SelectedID
(以及所需的Items
)-正確地執行OnPropertyChanged
。
從視圖模型設置SelectedID,或者從另一個可能更改它的控件“綁定”設置。
在為SelectedID設置的范圍內,設置SelectedText。
不需要像這樣的控件,實際上就是所有數據綁定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.