WPF Datagrid Проверка поперечного ряда - PullRequest
0 голосов
/ 11 декабря 2010

Есть ли у кого-нибудь пример проверки перекрестных строк для WPF Datagrid.Проверка на уровне ячейки и проверка Rowlevel не соответствуют моим требованиям.я пытаюсь придерживаться MVVM как можно больше.мой последний вариант - использовать код позади.так что в основном мне нужно получить доступ к Itemssource, когда что-то происходит в сетке.Буду признателен за любую оказанную помощь.Спасибо -Рей

1 Ответ

1 голос
/ 12 декабря 2010

в коде позади добавляет частичный класс к каждой таблице.

Свойство [HasNoError] возвращает true, если ошибок нет

Свойство [Error] возвращает ошибки в виде строки

if(tablename.HasNoError)
{
// do your logic
}
else
{
// display tablename.Error
}

На стороне xaml используйте привязку

<DataGridTextColumn  Binding="{Binding Path=ActualFieldName1, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged }" Header=" ActualFieldName1"  />

и это пример класса с использованием IDataErrorInfo-

public partial class tablename : IDataErrorInfo
{
    private Dictionary<string, string> errorCollection = new Dictionary<string, string>();
    public bool HasNoError
    {
        get
        {
            return string.IsNullOrWhiteSpace(Error);
        }
    }
    public string Error
    {
        get
        {
            if (errorCollection.Count == 0)
                return null;
            StringBuilder errorList = new StringBuilder();
            var errorMessages = errorCollection.Values.GetEnumerator();
            while (errorMessages.MoveNext())
                errorList.AppendLine(errorMessages.Current);
            return errorList.ToString();
        }
    }
    public string this[string fieldName]
    {
        get
        {
            string result = null;
            switch (fieldName)
            {
                case "ActualFieldName1":
                    if (string.IsNullOrWhiteSpace(this.ActualFieldName1))
                    {
                        result = "ActualFieldName1 is required.";
                    };
                     if (Other_Condition)
                    {
                        result = "Other Result";
                    };
                    break;
                case "ActualFieldName2":
                    if (string.IsNullOrWhiteSpace(this.ActualFieldName2))
                    {
                        result = "ActualFieldName2 is required.";
                    };
                    if (Other_Condition)
                    {
                        result = "Other Result";
                    };
                    break;
                    // and so
            }
            if (result != null && !errorCollection.ContainsKey(fieldName))
                errorCollection.Add(fieldName, result);
            if (result == null && errorCollection.ContainsKey(fieldName))
                errorCollection.Remove(fieldName);
            return result;
        }
    }
}

Чтобы было приятно добавить стиль для шаблона ошибки, см. Пример

<Style TargetType="{x:Type TextBox}">
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate>
                    <Border BorderBrush="Red" BorderThickness="1">
                        <Grid>
                            <AdornedElementPlaceholder x:Name="MyAdorner"/>
                            <Image Width="{Binding AdornedElement.ActualHeight, ElementName=MyAdorner}"  Margin="0" ToolTip="{Binding AdornedElement.(Validation.Errors)[0].ErrorContent, ElementName=MyAdorner}" HorizontalAlignment="Right"  VerticalAlignment="Center" Source="/Path/Exclamation.png" />
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...