Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# silverlight中是否有这样的内置控件?_C#_Silverlight_Controls - Fatal编程技术网

C# silverlight中是否有这样的内置控件?

C# silverlight中是否有这样的内置控件?,c#,silverlight,controls,C#,Silverlight,Controls,我有一个带有id和描述的项目列表(如果需要,我可以引入键值集合)。我需要的是绑定到viewmodel id属性的控件,但在其上显示相应项/对的描述。我知道的最接近的例子是combobox,在这里我设置了DisplayMemberPath和SelectedValue/SelectedValuePath,但我不需要下拉列表那么Silverlight中是否有用于此的内置控件? (当然,我可以自己编写一个,这很简单,我甚至可以为viewmodel添加一些逻辑,以获得我需要的对,并将其描述绑定到简单的文本

我有一个带有id和描述的项目列表(如果需要,我可以引入键值集合)。我需要的是绑定到viewmodel id属性的控件,但在其上显示相应项/对的描述。我知道的最接近的例子是combobox,在这里我设置了DisplayMemberPath和SelectedValue/SelectedValuePath,但我不需要下拉列表那么Silverlight中是否有用于此的内置控件?

(当然,我可以自己编写一个,这很简单,我甚至可以为viewmodel添加一些逻辑,以获得我需要的对,并将其描述绑定到简单的文本块)

编辑:为了说明我需要什么样的函数性,我编写了一个简单的示例类。它实际上满足了我的需求,但我仍然想知道是否可以使用内置控件

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>();

}
公共类CollectionItemDisplayControl:TextBox
{
公共集合项显示控件()
{
IsReadOnly=true;
}
公共字符串SelectedID
{
获取{return(string)GetValue(selectedProperty);}
set{SetValue(selectedProperty,value);}
}
//使用DependencyProperty作为SelectedID的后备存储。这将启用动画、样式、绑定等。。。
公共静态只读从属属性SelectedProperty=
DependencyProperty.Register(“SelectedID”、typeof(string)、typeof(CollectionItemDisplayControl)、new PropertyMetadata(new PropertyChangedCallback(OnSelectedChangedStatic));
SelectedChangedStatic上的私有静态无效(DependencyObject d、DependencyPropertyChangedEventArgs e)
{
CollectionItemDisplayControl发起人=d作为CollectionItemDisplayControl;
如果(发起人!=null)
{
发起人。被选择的变更(e);
}
}
已选择更改的私有无效(DependencyPropertyChangedEventArgs e)
{
string description=string.Empty;
字符串值=e.NewValue作为字符串;
if(值!=null)
{
foreach(var项目在_项目中)
{
if(item.UniqueID==值)
{
描述=项目。描述;
打破
}
}
}
文本=描述;
}        
私有IDataCollection _视图模型;
公共IDataCollection视图模型
{
获取{return\u viewModel;}
设置
{
_视图模型=值;
如果(_viewModel!=null)
{
_items=\u viewModel.items;
}
}
}
私有ObservableCollection_items=新ObservableCollection();
}
ItemClass包含两个属性:ID和Description。我可以将此控件放置在页面上、绑定项目和单向绑定SelectedID

编辑2:我没有设置SelectedID DependencyProperty,因此绑定无法工作,但我会立即修复它


编辑3:第一个代码片段太草率,无法正常工作,所以我修复了它。

如果我理解正确

您只需要实现正确的绑定

(您确实需要一个列表?不仅仅是一个项目,即使是单个项目,也需要一个类似于任何控件的列表)

将列表绑定到例如
ItemsControl

ItemsSource
设置为您的
项目列表

然后覆盖
ToString
到您的
项目
上,前提是它确实是“您的”。如果没有,你可以做你自己的包装

在ToString输出中,显示项目的内容,例如描述

这是一个最快的解决方案,您还可以根据需要制作项目模板

编辑:
好吧,只要把所有的东西都放在视图模型中并绑定到它——文本框,即

Text={Binding SelectedText}
e、 g.
…在您的视图模型中添加
SelectedText
SelectedID
(和
项目
,如果需要)-正确执行
属性更改

从视图模型中设置SelectedID,或者如果从另一个控件“绑定”,则可能会更改它。
在SelectedID的集合中设置SelectedText。

这样的事情不需要控件,实际上都是数据绑定

如果我理解正确

您只需要实现正确的绑定

(您确实需要一个列表?不仅仅是一个项目,即使是单个项目,也需要一个类似于任何控件的列表)

将列表绑定到例如
ItemsControl

ItemsSource
设置为您的
项目列表

然后覆盖
ToString
到您的
项目
上,前提是它确实是“您的”。如果没有,你可以做你自己的包装

在ToString输出中,显示项目的内容,例如描述

这是一个最快的解决方案,您还可以根据需要制作项目模板

编辑:
好吧,只要把所有的东西都放在视图模型中并绑定到它——文本框,即

Text={Binding SelectedText}
e、 g.
…在您的视图模型中添加
SelectedText
SelectedID
(和
项目
,如果需要)-正确执行
属性更改

从视图模型中设置SelectedID,或者如果从另一个控件“绑定”,则可能会更改它。
在SelectedID的集合中设置SelectedText。

这样的事情不需要控件,实际上都是数据绑定

我一次只需要显示列表中的一个项目-一个具有适当id的项目。ItemsControl将一次显示所有项目。好吧,我现在将使用我自己的控件。您还可以附加属性(selectedid和Items)等。如果您希望这样做(“WPF方式”),控件几乎不再被覆盖。我更喜欢(而且我认为更好)尽可能从视图模型方面进行工作(你可以像控件一样“重用”你的“小视图模型”。我一次只需要显示列表中的一个项目-一个具有适当id的项目。ItemsControl将一次显示所有项目。好吧,我现在将使用我自己的控件。你也可以附加属性