0

私は のDataGrid中に を持っていますUserControl。時間だけを表示して、フィールドにDataGridTextColumnバインドしたい。DateTimeユーザーが時刻を入力すると、日付部分 (年、月、日) が のプロパティ ( AttendDate)から取得されますUserControl

ConverterParameter私が最初に考えたのは、ユーザー コントロールのプロパティを次のようにバインドすることでした。

<DataGridTextColumn Header="From" 
    Binding="{Binding FromDate, Converter={StaticResource TimeConverter},ConverterParameter={Binding AttendDate,ElementName=UC}}"
/>

しかしConverterParameter、拘束力はありません。次に、を使用してこれを行うことを考えましたMultiBinding:

<DataGridTextColumn Header="משעה" Binding="{Binding FromDate, Converter={StaticResource TimeConverter}}" />
    <DataGridTextColumn.Binding>
        <MultiBinding Converter="{StaticResource TimeConverter}">
            <Binding Path="FromDate" />
            <Binding Path="AttendDate" ElementName="UC" />
        </MultiBinding>
    </DataGridTextColumn.Binding>
</DataGridTextColumn>

ただしIMultiValueConverter.Convert、これは複数のパラメーターを取り、表示をフォーマットするときにのみ呼び出されます。IMultiValueConverter.ConvertBackこれ編集時に呼び出され、1 つのパラメーター (入力された文字列) のみを受け取ります。

これどうやってするの?

(私はMVVMを使用していません。変更できるものではありません。)

4

2 に答える 2

0

解決策の 1 つのアイデアは、必要な情報をマージするゲッターのみを持つ別のプロパティを用意することです。

何かのようなもの

property string Time {get {return this.FromDate.toshortdate().tostring() + AttendDate.hour.tostring() + attenddate.minutes.tostring()}; }

コードはこれとまったく同じではないかもしれませんが、このプロパティをバインドして、必要な情報を表示する場所に表示することができます。

よろしく、

=============編集===========

私はこれを試しました、非常に単純な例です...それがあなたのために働くかどうかわかりません:

XAML:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:conv ="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <conv:TimeConverter x:Key="tmeConverter"></conv:TimeConverter>
    </Window.Resources>

    <Grid>
        <DataGrid ItemsSource="{Binding listExample}">
            <DataGrid.Columns>
                <DataGridTextColumn Header="teste" >
                    <DataGridTextColumn.Binding>
                        <MultiBinding Converter="{StaticResource tmeConverter}">
                            <Binding Path="FromDate" />
                            <Binding Path="AttendDate" />
                        </MultiBinding>
                    </DataGridTextColumn.Binding>
                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Window>

コード ビハインド (.cs)

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public List<Example2> listExample { get; set; }

        public Example2 Test { get; set; }

        public MainWindow()
        {
            InitializeComponent();
            this.listExample = new List<Example2>();
            //listExample.Add(new Example { IsChecked = false, Test1 = "teste" });
            //listExample.Add(new Example { IsChecked = false, Test1 = "TTTTT!" });

            this.Test = new Example2 { AttendDate = "1ui", FromDate = "ff" };
            this.listExample.Add(this.Test);

            DataContext = this;


        }
    }
}

そして Example2 クラス:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WpfApplication1
{
    public class Example2
    {
        public string FromDate { get; set; }

        public string AttendDate { get; set; }
    }
}

コンバータ:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;

namespace WpfApplication1
{
    class TimeConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return values[0].ToString() + values[1].ToString();
        }

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

最後のウィンドウは 3 列で表示され、最後の 2 列を変更すると、最初の列が自動的に編集されます。

あれですか?

于 2013-05-29T16:49:42.547 に答える