[英]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.