c# - WP7 相当于 EmptyDataTemplate?

标签 c# silverlight xaml windows-phone-7 caliburn.micro

许多 ASP.NET 数据绑定(bind)控件公开了一个 EmptyDataTemplate,当控件绑定(bind)到空数据源时呈现该模板。在我的 WP7 应用程序中,当绑定(bind)到 ListBox 的数据源为空时,我也想显示一条友好的消息。有没有一种相当优雅的方法来实现这一目标?最好与 caliburn.micro 集成/能够集成?

谢谢!!

最佳答案

我不喜欢为这样的功能使用代码隐藏。我宁愿推荐实现一个可在绑定(bind)标记中使用的 DataTemplateConverter 来实现这个确切的功能。

例如:

<ContentControl ContentTemplate="{Binding Converter={StaticResource templateConverter}, Path=yourbindingpath}"/>

转换器将在 xaml 文件的资源部分中实例化。

<myControls:EmptyDataTemplateConverter x:Key="templateConverter">
  <myControls:EmptyDataTemplateConverter.NonEmpty>
     <DataTemplate>[...]</DataTemplate>
  </myControls:EmptyDataTemplateConverter.NonEmpty>
  <myControls:EmptyDataTemplateConverter.Empty>
     <DataTemplate>[...]</DataTemplate>
  </myControls:EmptyDataTemplateConverter.Empty>
</myControls:EmptyDataTemplateConveter>

在这种情况下,Empty/NonEmpty 实现由您决定。

要了解如何实现这样的 ValueConverter,请参阅 MSDN (或谷歌)

示例已添加。您可以使用 DataTemplate 的依赖属性,但为了简洁起见,我在这里省略了这一点。

public class EmptyDataTemplateConverter: IValueConverter
{
    public DataTemplate Empty{get;set;}
    public DataTemplate NonEmpty{get;set;}

    // This converts the DateTime object to the DataTemplate to use.
    public object Convert(object value, Type targetType, object parameter,
    System.Globalization.CultureInfo culture)
   {
       if(IsEmpty(value))
       {
          return this.Empty;
       }
       else
       {
          return this.NonEmpty;
       }
   }

    //Your "empty/not empty" implementation here. Mine is rather... incomplete.
    private bool IsEmpty(object value)
    {
       return value!=null;
    }
    // No need to implement converting back on a one-way binding 
    public object ConvertBack(object value, Type targetType, 
        object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

编辑: 实现相同目标的其他方式,但在“Silverlight 方式”中更多一点。使用GoToStateAction和适当的触发器。将您的模板图形封装在一个 UserControl 中,并为此 UserControl 指定状态。这样,用户控件将根据触发器的行为(空/非空)而改变。

结果将与我之前的提议相同,但增加了状态更改动画的好处,这将很难通过 DataTemplateConverter 实现(修改后的 TransitioningContentControl)。

关于c# - WP7 相当于 EmptyDataTemplate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5208654/

相关文章:

silverlight - 在 PagedCollectionView 中隐藏和重新排序列

silverlight - RIA/EF4实体属性映射到NOT NULL nvarchar-空字符串

C# BitmapFrame.Thumbnail 属性对于某些图像为 null

c# - 多 Silverlight 数据绑定(bind)

c# - Xamarin 表单中的可重用 ContentView

c# - 在 WPF 中使用动态资源设置控件背景颜色?

c# - 通过 MVVM 绑定(bind) MenuItem 的命令

c# - 如何删除 datagrid wpf 中的选定行?

c# - CreateQuery().list() 的 NHibernate 输出列/投影

c# - Asp.NET MVC 5 IdentityServer4 外部供应商