我使用的是一个DataTemplate,它在ResourceDictionary文件中。
<DataTemplate x:Key="AlertWarningMessage">
<Grid>
<Border Visibility="{Binding DataContext.Visibility}" Background="{StaticResource ResourceKey=AlertWarningMessageBackground}" HorizontalAlignment="Stretch" Height="30">
<WrapPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="WARNING !" FontWeight="Bold" Foreground="{StaticResource ResourceKey=AlertWarningMessageForeground}" FontSize="13"/>
<TextBlock Text="{Binding DataContext.Message}" Foreground="{StaticResource ResourceKey=AlertWarningMessageForeground}" Margin="5,0,0,0"/>
</WrapPanel>
</Border>
</Grid>
</DataTemplate>我将这个字典合并到我的UserControl中,并使用如下模板:
<ContentControl ContentTemplate="{StaticResource AlertWarningMessage}" Grid.Row="2" Margin="0,2,0,0" DataContext="{Binding AlertSummary, UpdateSourceTrigger=PropertyChanged}" />在我的VM中,我使用了一个具有两个属性的类:
Public Class AlertInfos
Public Property Visibility As Visibility
Public Property Message As String
Public Sub New(p_visibility As Visibility, p_msg As String)
Me.Visibility = p_visibility
Me.Message = p_msg
End Sub
End Class属性VM作为我的类:
Private _alertSummary As AlertInfos
Public Property AlertSummary() As AlertInfos
Get
Return _alertSummary
End Get
Set(ByVal value As AlertInfos)
_alertSummary = value
RaisePropertyChanged("AlertSummary")
End Set
End Property此对象的属性设置为Collapsed和String.Empty。
接下来,我将更改此对象的值,如下所示:
Public Sub ShowAlert()
Me.AlertSummary.Message = "Test"
Me.AlertSummary.Visibility = Visibility.Visible
'Me.StartTimerAlert()
RaisePropertyChanged("AlertSummary")
End Sub但这不管用。有两个问题:
Visibility设置为Collapsed时,Border是可见的。Message属性时,它不会在视觉上得到更新。我认为我的Binding有问题,但我不知道在哪里。我尝试过不同的东西,但总有这样的问题。此外,我还将该属性直接绑定在TextBlock中,位于ContentControl和Binding工作查找中。
你知不知道?
发布于 2018-04-20 13:36:02
您应该将数据模板更改为:
<DataTemplate x:Key="AlertWarningMessage">
<Grid>
<Border Visibility="{Binding RelativeSource={RelativeSource AncestorType=ContentControl}, Path=DataContext.Visibility}" Background="AliceBlue" HorizontalAlignment="Stretch" Height="30">
<WrapPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="WARNING !" FontWeight="Bold" Foreground="Red" FontSize="13"/>
<TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType=ContentControl}, Path=DataContext.Message}" Foreground="Red" Margin="5,0,0,0"/>
</WrapPanel>
</Border>
</Grid>
</DataTemplate>和您的AlertInfos到这个(它在C#上,所以尝试将它翻译成VB)
public class AlertInfos
{
private string message;
public string Message
{
get
{
return this.message;
}
set
{
if (this.message != value)
{
this.message = value;
}
}
}
private Visibility visibility;
public Visibility Visibility
{
get
{
return this.visibility;
}
set
{
if (this.visibility != value)
{
this.visibility = value;
}
}
}
}它应该能工作,至少它在我的电脑上工作
发布于 2018-04-20 10:08:39
我不熟悉VB,但是消息需要RaisePropertyChanged
可见性通常也是绑定的,这也是RaisePropertyChanged --然后使用BooleanToVisibilityConverter。
确保您的属性是公共的-有私有支持变量和RaisePropertyChanged。
private bool _isSomethingVisibile;
public bool IsSomethingVisibile
{
get { return _isSomethingVisibile; }
set
{
_isSomethingVisibile = value;
RaisePropertyChanged();
}
}您不需要在绑定前加上隐含的"DataContext“。
https://stackoverflow.com/questions/49938625
复制相似问题