Поскольку мы не можем предоставить точное решение, не видя ваш код.
Вот список проверки вы можете следовать, чтобы выяснить, ошибка:
1.Debug ваш конвертер и проверить, если он возвращается требуемое значение для всех тестовых случаев.
2.Проверьте, все ли имена правильные и нет опечатки в ur xaml.
Вот реализация для связывания диапазона столбцов с vm и его обновления с помощью команды, связанной с событием click.
<Page.Resources>
<local:BoolToColumnSpanConverter x:Key="BoolToColumnSpanConverter" />
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid.DataContext>
<local:Items />
</Grid.DataContext>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Rectangle HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Fill="Red"
Grid.ColumnSpan="{Binding span, Converter={StaticResource BoolToColumnSpanConverter}}" />
<Button Click="Button_Click"
Content="change span"
Grid.ColumnSpan="2"
Grid.Column="2"
Margin="5"
Command="{Binding ChangeSpanCommand, Mode=OneWay}" />
</Grid>
код позади:
Преобразователь просто преобразует верно 2 и ложь 1
Команда привязана к методу в VM под названием UpdateSpan который только превращает логическое обратное ,
Когда кнопка нажата, так как она связана с командой команда называется, так как он просто возвращает новый RelayCommand с UpdateSpan в качестве параметра этот метод выполняется .. который будет обновлять калибровочный булево запуска изменение, которое уведомляется Системой через событие OnPropertyChanged, и преобразователь значения выполняется, превращая столбцы в 1 и 2.
public class BoolToColumnSpanConverter : IValueConverter
{
public object Convert(object value , Type targetType , object parameter , string language)
{
var b = (bool)value;
return b ? 2 : 1;
}
public object ConvertBack(object value , Type targetType , object parameter , string language)
{
throw new NotImplementedException();
}
}
public class Items : INotifyPropertyChanged
{
private bool _span;
public bool span
{
get { return _span; }
set
{
if (value != _span) _span = value;
OnPropertyChanged();
}
}
public ICommand ChangeSpanCommand {
get
{
return new RelayCommand(() => UpdateSpan());
}
}
public Items()
{
span = true;
}
public void UpdateSpan()
{
span = !span;
}
#region Notify Property Changed Members
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName]string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this , new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
public class RelayCommand : ICommand
{
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
this._action();
}
private Action _action;
public RelayCommand(Action action)
{
this._action = action;
}
}
Возможно, вы захотите ознакомиться с этим http://blog.galasoft.ch/posts/2012/09/adventures-in-windows-8-placing-items-in-a-gridview-with-a- columnpan-or-rowspan/ – bit
@bit спасибо за это. Я нашел эту статью (все еще открытую в своем браузере), но я думал, что это было слишком сложно для того, чего я хотел достичь, но я прочитаю ее более подробно и посмотрю, смогу ли я понять и понять базовую концепцию и применить ее к мое решение. – Thierry
На этой странице перейти в раздел * А теперь для ColumnSpan!* и это, скорее всего, то, что вам понадобится – bit