IDと説明を含むアイテムのリストがあります(必要に応じて、代わりにキーと値のコレクションを導入できます)。必要なのは、viewmodel id プロパティにバインドされたコントロールですが、対応するアイテム/ペアの説明を表示します。私が知っている最も近い例は、DisplayMemberPath と SelectedValue/SelectedValuePath を設定するコンボボックスですが、ドロップダウンは必要ありません。では、Silverlight にはこのためのビルトイン コントロールはありますか?
(もちろん、私は自分でコードを書くことができます。簡単で、必要なペアを取得し、その説明を単純なテキストブロックにバインドするためのビューモデルのロジックを配置することもできます)
編集:必要な機能を説明するために、簡単なサンプルクラスをコーディングしました。それは実際に私のニーズを満たしていますが、組み込みのコントロールを使用できるかどうかを知りたいです。
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 と説明の 2 つのプロパティが含まれています。このコントロールをページに配置し、Items をバインドし、SelectedID を一方向にバインドできます。
編集 2: SelectedID DependencyProperty を作成しなかったため、バインディングは機能しませんが、すぐに修正します
編集 3:最初のスニペットがずさんで、適切に動作しなかったので、修正しました。