繁体   English   中英

如何在XAML中设置用户控件的列表项

[英]How to Set List Items of a usercontrol in XAML

我创建一个用户控件。 这种类型具有依赖性popperty

List<CustomSubMenuItem>

和CustomSubMeuItem

class CustomSubMenuItem
{
public string Title {get;set;}
public Color BackColor {get;set;}
publiv Visibility ItemVisibility {get;set;}
public ICommand Command {get;set;}
}

在XAML中,我通常绑定到属性。 但我无法在XAML中制作此项目,例如ContextMenu或ListBoxItems。

<MyControl>
<MyControl.Items>
<CustomSubMenuItem Title="First" Visibility="{Binding Model.firstvisibility}"/>
<CustomSubMenuItem Title="Second" Visibility="{Binding Model.secondvisibility}"/>
</MyControl.Items>
</MyControl>

但是这种错误,我该怎么办。

更新:谢谢,我可以在下面回答。 我没有在xaml中定义类的名称空间。 当我添加名称空间时,上部代码为true CustomSubItemMenu之前。

将控件数据上下文设置为列表,然后将ItemsSource绑定到列表:

List<CustomSubMenuItem> MenuItems = new List<CustomSubMenuItem>();
MyControl.DataContext = MenuItems;

然后在XAML fe中:

  <MyControl ItemsSource="{Binding}">
    <MyControl.ItemTemplate>
        <DataTemplate><TextBlock Text="{Binding Path=Title}"/></DataTemplate>
    </MyControl.ItemTemplate>
 </MyControl>

您可以按照需要的方式绑定标题和颜色。

更新:

如果要将可见性绑定到某个属性,一种方法是在模型中具有布尔值并将其绑定到可见性。 另外,您还需要一个ValueConverter来将true值设置为可见,将false设置为隐藏。

首先,在窗口中添加一个名称空间。 声明用于定义ValueConverter类的名称空间。

xmlns:vm="clr-namespace:NamespaceHere"

XAML具有绑定可见性:

<MyControl Visibility="{Binding VisibilityValue, Converter={StaticResource converter}}"/>

然后将ValueConverter添加到您的:

<vm:BoolToVisibilityConverter x:Key="converter" />

最后,您需要创建ValueConverter类,以我的示例为例:

 public class BoolToVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        bool val = (bool)value;
        if(val)
        {
            return Visibility.Visible;
        }
        else
        {
           return Visibility.Hidden;
        }
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        bool val = (bool)value;
        if (val)
        {
            return Visibility.Visible;
        }
        else
        {
            return Visibility.Hidden;
        }
    }
}

如果要在VisualTree( <MyControl.Items>所在的位置)中实例化CustomSubMenuItem,则应从MenuItem或至少从FrameworkElement派生。

另外,您可以将您的项目列表创建为StaticResource,然后绑定到该资源,就像这样(当然要调整名称空间),如果需要,请应用ItemTemplate:

<Window.Resources>
    <x:Array x:Key="menuItems" Type="{x:Type local:CustomSubMenuItem}" 
            xmlns:local="clr-namespace:yourNamespace">
            <local:CustomSubMenuItem Property1="value1" Property2="value2" />
            <local:CustomSubMenuItem Property1="value3" />
    </x:Array>
<Window.Resources>

<MyControl ItemsSource="{StaticResource menuItems}">
     <MyControl.ItemTemplate>
           <DataTemplate>
               <TextBlock Text="{Binding Property1}" />
           </DataTemplate>
     </ListBox.ItemTemplate>
</ListBox>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM