WPF MVVM - 如何在运行时动态更改样式

时间:2015-10-19 03:14:10

标签: wpf xaml mvvm

我是WPF的新手,我想做的就是下面的内容。这是我的XAML代码:

CustomWidth = 500

我必须在ViewModel中编写的所有逻辑代码(不允许在代码隐藏中),在VM的构造函数中我设置了属性RelayCommand并在搜索的- (UIImage*) getSubImageWithRect: (CGRect) rect { UIGraphicsBeginImageContext(rect.size); CGContextRef context = UIGraphicsGetCurrentContext(); // translated rectangle for drawing sub image CGRect drawRect = CGRectMake(-rect.origin.x, -rect.origin.y, self.size.width, self.size.height); // clip to the bounds of the image context // not strictly necessary as it will get clipped anyway? CGContextClipToRect(context, CGRectMake(0, 0, rect.size.width, rect.size.height)); // draw image [self drawInRect:drawRect]; // grab image UIImage* subImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return subImage; } 操作中按钮我将值更改为300.在第一次运行(加载事件)时可以将ctrl width增加到500,但是然后我单击Search按钮将其缩小到300,没有任何反复发生。

任何人都可以告诉我为什么它没有生效并且如何让它起作用?提前谢谢。

2 个答案:

答案 0 :(得分:0)

请查看本文[来源] DataGrid column width doesn't auto-update。简而言之,它不能像前面提到的那样自动完成,但是如果你想在这里编写代码,那么这个堆栈溢出的一些信息就如何成功/动态地完成。我认为有两个主要部分。将宽度更新为1 *并通知属性已更改。

private void dg_TargetUpdated(object sender, DataTransferEventArgs e)
{
    dg.Columns[0].Width = 0;
    dg.UpdateLayout();
    dg.Columns[0].Width = new DataGridLength(1, DataGridLengthUnitType.Star);
}

通知属性已更改。

<DataGridTextColumn Binding="{Binding First}" Width="1*"/>
<DataGridTextColumn Binding="{Binding Last, NotifyOnTargetUpdated=True}" 

答案 1 :(得分:-1)

DataGrid一旦增加就不会减小它的大小,因为它会说一些较大的单元格内容,并且如果你设置了ColumnWidth =“SizeToCells”。您必须编写自己的逻辑才能实现此目的,或者您可以将其设置为SizeToHeader,并在该单元格的工具提示中显示更大的单元格内容。