У меня в таблице (WPF DataGrid) строки в зависимости от ряда условий должны иметь свойство IsEnabled True или False. Для анализа условий написал простенький мультиконвертор:
class DisRowConv : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values == null)
throw new NotImplementedException();
else
{
DateTime? AvWorkDateID = values[0] as DateTime?;
DateTime? AvElCom = values[1] as DateTime?;
if ((AvWorkDateID == null || AvWorkDateID == avWorkDateID) && AvElCom == null)
return false;
else
return true;
}
}
}
Переменные AvWorkDateID, AvElCom это поля из БД SQL. Но для анализа необходимо использовать и внешнюю по отношению к конвертеру переменную avWorkDateID, ее я передаю используя DataContext.
public class AvWorkDateToXaml
{
public DateTime AvWorkDate { get; set; }
}
public partial class BadCanals : Window
{
public AvWorkDateToXaml DateToXaml { get; set; }
DateTime avWorkDateID; // Код нарушения
public BadCanals(bool AddForm, DataAvZVKDataContext ref_ref, DateTime avWorkDateID)
{
InitializeComponent();
this.AddForm = AddForm;
this.ref_ref = ref_ref;
this.avWorkDateID = avWorkDateID;
DateToXaml = new AvWorkDateToXaml() { AvWorkDate = avWorkDateID };
this.DataContext = DateToXaml;
}
}
XAML разметка:
<DataGrid x:Name="canalDataGrid" ItemsSource="{Binding Source={StaticResource canalViewSource}}" RowDetailsVisibilityMode="VisibleWhenSelected">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource disRowConv}">
<Binding Path="AvWorkDateID"/>
<Binding Path="AvElCom"/>
<Binding Path="AvWorkDate"/>
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
</DataGrid>
Не понимаю, почему в конвертер передаются все три значения как Null. В чем я ошибаюсь?
Вышел из положения конструкцией:
private void CanalDataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
Canals canal = (Canals)e.Row.DataContext;
if ((canal.AvWorkDateID == avWorkDateID || canal.AvWorkDateID == null) && canal.AvElCom == null) e.Row.IsEnabled = true;
else e.Row.IsEnabled = false;
}
Хотя непонятно, почему если конвертер привязан к строке, то в object[] values поступают значения Null, а если конвертер привязан колонке в конвертер передаются правильные значения. Буду разбираться дальше.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Проект приложение windows service/служба, после какого то момента перестала работать миграция и получаю вот такую ошибку, не могу понять чего он трогает...
Создал шахматное поле и разрабатываю ходыПоле сделал с помощью грида и заполнил кнопками
Всем привет! Создал консольный проект C#, но после сборки в папке bin/debug лежит папка netcoreapp21