2015-06-15 36 views
0

我創建了一個用戶控件。這通過這種類型如何在XAML中設置usercontrol的列表項目

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

我結合prperty在usuall具有dependencypoperty。但我不能使這個項目在XAML,像ContextMenu或ListBoxItems。

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

但這種錯誤,我該怎麼辦。

更新: 謝謝, 我到下面回答。我沒有在xaml中定義類的命名空間。當我添加命名空間時,上面的代碼是真實的:之前CustomSubItemMenu。在XAML f.e

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

然後:

+1

沒有項目= 「{Binding ItemCollectionName}」工作? –

+0

是的,它是作品。但我需要在運行時更改一些項目,並需要綁定到內部屬性。如可見性。 –

+0

如果您的問題是正確答案,請將我的答案標記爲正確。 –

回答

0

設置控件的DataContext給你的清單,然後將其綁定的ItemsSource它

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

您可以綁定您的標題和顏色你想要的方式。

UPDATE:

如果你要綁定能見度你的財產之一,一個辦法做到這一點是有型號bool值,並將其綁定到可視性。你也需要一個ValueConverter來將真值設置爲可見和假隱藏。

首先,在窗口中添加一個名稱空間。在您的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; 
     } 
    } 
} 
+0

謝謝,但我正在使用MVVM模式,我需要將例如列表中每個項目的可見性綁定到我的模型中的一個屬性。就像你在xaml中製作menuitem一樣。您爲每個菜單項設置標題等。 –

+0

謝謝,但我不想爲我的用戶控件設置可見性。請告訴我如何設置5個項目的上下文菜單的可見性,在項目運行開始時應該摺疊2個項目。 –

+0

你想要列表項目是List Items還是你在談論什麼contextmenu? –

0

如果你想在你的VisualTree中實例化你的CustomSubMenuItem,它應該從MenuItem派生,或者至少從FrameworkElement派生,這是<MyControl.Items>的地方。

或者,您可以創建項目列表作爲靜態資源,然後綁定到這個資源,像這樣的(當然調整的命名空間),如果你需要申請一個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> 
相關問題