UserControl内容仅在第一次显示时更新

时间:2015-07-27 05:57:00

标签: c# wpf xaml mvvm user-controls

我在自定义UserControl中遇到数据绑定问题。

如果在用户输入中发现错误,这几乎是一个错误对话框覆盖,可以在按下按钮时调用。

在控件中我有2个对象,一个退出按钮和一个包含错误的字符串列表。

我的问题是用户控件上的列表是在第一次将对话框可见性设置为true时设置的,然后在此之后不刷新。 我在更改列表时调用OnNotifyPropertyChange,但它似乎没有任何区别。

My MainContent XAML UserContent Section。

<Grid x:Name="Overlay" Panel.ZIndex="1000"  Visibility="{Binding Path=ShowOverlay, Converter={StaticResource booltoVis},FallbackValue=Hidden }" Grid.Row="2" Grid.RowSpan="2">
        <Grid.Background>
            <SolidColorBrush Color="Black" Opacity=".5"/>
        </Grid.Background>

        <View:UserControl1>

            <View:UserControl1.MainContent>
                <ListBox ItemsSource="{Binding Path=Error_Message_List, Mode=TwoWay}" />
            </View:UserControl1.MainContent>

            <View:UserControl1.DialogExitButton>
                <Button Command="{Binding Path=CloseModalDialogClickCommand}" Content="OK">
                </Button>
            </View:UserControl1.DialogExitButton>

        </View:UserControl1>    
</Grid>

我的用户控件绑定XAML

<Grid Margin="5" Background="White">
    <Grid.RowDefinitions>
        <RowDefinition Height="0.1*"/>
        <RowDefinition Height="0.6*"/>
        <RowDefinition Height="0.2*"/>
    </Grid.RowDefinitions>
    <TextBlock Text="Error in script generation!" FontWeight="Bold"/>
    <ContentControl Content="{Binding MainContent, ElementName=XAMLErrorPopupControl}" Grid.Row="1"/>
    <ContentControl Content="{Binding DialogExitButton, ElementName=XAMLErrorPopupControl}" Grid.Row="2" Margin="224,0,0,0"/>
</Grid>

我的用户控制代码隐藏

    public static readonly DependencyProperty MainContentProperty =
        DependencyProperty.Register(
            "MainContent", 
            typeof(object), 
            typeof(UserControl1),
            new FrameworkPropertyMetadata(default(object),
                   FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

    public object MainContent
    {
        get { return (object)GetValue(MainContentProperty); }
        set { SetValue(MainContentProperty, value); OnPropertyChanged("MainContent"); }
    }

    public static readonly DependencyProperty DialogExitButtonProperty =
        DependencyProperty.Register(
            "DialogExitButton", 
            typeof(object), 
            typeof(UserControl1), 
            new UIPropertyMetadata(null));

    public object DialogExitButton
    {
        get { return (object)GetValue(DialogExitButtonProperty); }
        set { SetValue(DialogExitButtonProperty, value); OnPropertyChanged("DialogExitButton"); }
    }

任何帮助将不胜感激!干杯!

1 个答案:

答案 0 :(得分:0)

首先: Error_Message_List必须是ObservableCollection<YourItemType>才能在列表中添加/删除项目时通知用户界面。< / p>

第二: YourItemType必须实施INotifyPropertyChanged,以便在列表中的项目已修改时通知用户界面。