簡體   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