绑定源更改时WPF更新UI

时间:2010-08-17 15:27:36

标签: wpf user-interface binding datatemplate

我有一个带有列表框和内容控件的WPF应用程序。 contentcontrol内容绑定到列表框,并具有一个datatemplate,显示一个文本框,其内容绑定到所述列表框中所选项的变量。到目前为止,一切运行良好,即当我从列表框中选择一个项目时,文本框内容会更改为变量的当前值。但是,如果在运行时我更改了变量的值,则文本框不会更新,除非我选择另一个列表框项目,然后再次选择原始项目。关于我做错了什么或者我在这里缺少什么的想法?我以为文本框的价值会自动改变?非常感谢您的帮助。

以下是示例(MainWindow.xaml)

<Grid>
   <ListBox Height="100" HorizontalAlignment="Left" Margin="12,105,0,0" x:Name="listBox1" VerticalAlignment="Top" Width="120" />

   <ContentControl Height="120" HorizontalAlignment="Left" Margin="191,105,0,0" Name="contentControl1" VerticalAlignment="Top" Width="300" ContentTemplate="{DynamicResource MyDataTemplate}" Content="{Binding SelectedItem,ElementName=listBox1}"/>

   <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="202,56,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />

</Grid>

C#代码:

    public MainWindow()
    {
        InitializeComponent();
        listBox1.Items.Add(new MyItem(32));
        listBox1.Items.Add(new MyItem(45));
        listBox1.Items.Add(new MyItem(5));
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        ((MyItem)listBox1.SelectedItem).Value = 4564654;
    }

额外课程:

public class MyItem
{
    public MyItem(Int32 Value)
    {
        this.Value = Value;
    }

    public Int32 Value { get; set; }
}

模板:                                    

我确定我遗漏了一些事情,比如通知UI来源的变化或以某种方式调用刷新。这是我的真实问题的更简化版本,其中包括控件和标签等,当源更改时必须刷新。干杯:)

1 个答案:

答案 0 :(得分:5)

您的MyItem类可能需要实现INotifyPropertyChanged接口。当Value属性发生更改时,调用OnPropertyChanged(“Value”)以通知接口该值已更改并且需要重新绘制。

public class MyItem : INotifyPropertyChanged
{
    public MyItem(Int32 Value)
    {
        this.Value = Value;
    }

    private Int32 _value;
    public Int32 Value 
    { 
        get { return _value; } 
        set { _value = value; OnPropertyChanged("Value"); }
    }
}