簡體   English   中英

Silverlight中是否有這樣的內置控件?

[英]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上覆蓋ToStringToString它確實是“您的”。 如果沒有,您可以自己包裝。

在ToString輸出中,無論顯示什么內容,例如描述。

這是最快的解決方案,您也可以根據需要制作項目模板。

編輯:
只需將所有內容放入視圖模型並綁定到它-TextBox,即

Text={Binding SelectedText}

例如
...在您的視圖模型中添加SelectedTextSelectedID (以及所需的Items )-正確地執行OnPropertyChanged

從視圖模型設置SelectedID,或者從另一個可能更改它的控件“綁定”設置。
在為SelectedID設置的范圍內,設置SelectedText。
不需要像這樣的控件,實際上就是所有數據綁定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM