2015-09-06 93 views
1

即时新手与wpf + mvvm,有一个简单的mui:ModernTab控制项目harcoded。绑定mui ModernTab wpf mvvm

<mui:ModernTab Layout="List" SelectedSource="/Pages/Settings/Appearance.xaml"> 
     <mui:ModernTab.Links> 
      <mui:Link DisplayName="appearance" Source="/Pages/Settings/Appearance.xaml" /> 
      <mui:Link DisplayName="about" Source="/Pages/Settings/About.xaml" /> 
     </mui:ModernTab.Links> 
    </mui:ModernTab> 

我想对视图模型是这样的构造函数的dbdata在XAML代码填充它标签:

<ScrollViewer> 
     <mui:ModernTab Layout="List" Links="{Binding AllowedViews}" /> 
</ScrollViewer> 

在视图模型C#构造函数:

public class ApplicationViewModel:ViewModelBase 
{ 
    private LinkCollection allowedViews; 

    public LinkCollection AllowedViews 
    { 
     get { return allowedViews; } 
     set { 
       allowedViews = value; 
       NotifyPropertyChanged("tabitem"); 
     } 
    } 

    public ApplicationViewModel() 
    { 
     allowedViews.Add(new Link() { DisplayName = "item1"}); 
     allowedViews.Add(new Link() { DisplayName = "item2" }); 
     allowedViews.Add(new Link() { DisplayName = "item3" }); 

    } 

    //allowedViews.Add(new Link() { DisplayName = "Otra Ventana", Source = new Uri("/Views/ModernWindow1.xaml", UriKind.RelativeOrAbsolute) }); 
} 

问题:

  1. 1-better better use a LinkCo选择或列表来填充数据。
  2. 正确的方法来做绑定是与道具链接 on xaml?
  3. 有人可以提供任何文档或示例吗?

非常感谢。请原谅我的英语。

回答

0
public LinkCollection AllowedViews 
{ 
    get { return allowedViews; } 
    set { 
      allowedViews = value; 
      NotifyPropertyChanged("tabitem"); 
    } 
} 

这个“tabitem”应该是“AllowedViews”,对吗?

0

这里是动态链接的定义

<mui:ModernTab Layout="List" Links ="{Binding MyIEnumerable, Converter={StaticResource myCollectionToLinksConverter}}"> 
     <mui:ModernTab.ContentLoader> 
      <app:MyControlLoader /> 
     </mui:ModernTab.ContentLoader> 
</mui:ModernTab> 

随后的交换器的定义添加到您的窗口或控件

<UserControl.Resources> 
    <MyCollectionToLinksConverter x:Key="myCollectionToLinksConverter"/> 
</UserControl.Resources> 

然后添加转换器类

public class MyCollectionToLinksConverter: IValueConverter 
{ 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     var source = (ICollection<MyCollectionItem>)value; 
     return new LinkCollection(source.Select(i => new Link() {DisplayName = i.Name, Source = new Uri(v.i, UriKind.Relative)})); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

然后添加您的内容加载程序

class MyControlLoader: DefaultContentLoader 
{ 
    protected override object LoadContent(Uri uri) 
    { 
     var myTarget = UIModel.Instance.GetMyTargetObjectById(v => v.Name == uri.OriginalString); 

     return new YourTabContentControl() {DataContext = myTarget}; 
    } 
}