2012-07-25 3 views
0

У меня есть DataGrid (в WPF), и я привязал его к списку пользовательского класса, который я создал.Данные привязки и значения по умолчанию

Допустим, для простоты, класс следующим образом:

public class MyClass{ 

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

} 

Есть ли способ (в привязки данных или сам класс) говорят, что «если вал = -1, в сетке вместо отображая -1, просто отобразите пробел или «0»

Я искал значение IsTargetNull Binding, и это было бы хорошо, если int был типом с нулевым значением, но я предпочел бы не использовать int? если возможно.

Есть ли способ сделать это? Какой-то переопределить ToString() o r что-то?

Решение см. Ниже ответ. Единственное изменение, которое я сделал в том, чтобы установить привязку & обращенного в коде:

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

Вы можете использовать Преобразователь значений. – kmatyaszek

+0

Я рассмотрю это! спасибо :) – Toadums

ответ

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

Смежные вопросы