2012-07-25 110 views
0

我所拥有的是一个DataGrid(在WPF),我已经将它绑定到我所做的一个自定义类的列表。数据绑定和默认值

比方说为了简单起见,类是如下:

public class MyClass{ 

    int val; 
    string str; 
    static const int alwaysSetValue = 10; 

} 

有一种方法,以(在数据绑定或类本身)说“如果val = -1,在数据网格而不是显示-1,只是显示一个空格,或者''?

我在看Binding的IsTargetNull值,如果int是一个可为空的类型,那会很好,但如果可能的话,我宁愿不使用int。

有没有办法做到这一点?某种覆盖ToString()o什么?

解决方案 查看下面的答案。我所做的唯一的变化是在代码中设置绑定&转换:

DataGrid.Columns.Add(new DataGridTextColumn() { Header = "Value", Binding = new Binding("val") { Converter = new MyValConverter() } }); 
+2

您可以使用Value Converter。 – kmatyaszek 2012-07-25 19:25:12

+0

我会考虑的!谢谢:) – Toadums 2012-07-25 19:27:40

回答

1

这里是例子:

XAML文件:

<Window x:Class="DataGridConverter.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" 
     xmlns:local="clr-namespace:DataGridConverter" 
     > 
    <Window.Resources> 
     <local:MyValConverter x:Key="myCon" /> 
    </Window.Resources> 
    <Grid> 
     <DataGrid Name="grid" AutoGenerateColumns="False"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Val" Binding="{Binding val, Converter={StaticResource myCon}}" /> 
       <DataGridTextColumn Header="Str" Binding="{Binding str}" />    
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 
</Window> 

代码隐藏文件:

using System; 
using System.Collections.Generic; 
using System.Windows; 
using System.Windows.Data; 
using System.Windows.Documents; 

namespace DataGridConverter 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      List<MyClass> _source = new List<MyClass>(); 
      for (int i = 0; i < 5; i++) 
      { 
       _source.Add(new MyClass { val = 1, str = "test " + i }); 
      } 

      _source[2].val = -1; 

      grid.ItemsSource = _source; 
     } 
    } 

    public class MyClass 
    { 
     public int val { get; set; } 
     public string str { get; set; } 
     const int alwaysSetValue = 10; 
    } 

    public class MyValConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      return (int)value == -1 ? string.Empty : value; 
     } 

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

完美的,正是我需要的,除了我从代码设置转换器(见上面的例子,如果任何人想知道如何) – Toadums 2012-07-25 20:00:10