我有一个带有列表框和内容控件的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来源的变化或以某种方式调用刷新。这是我的真实问题的更简化版本,其中包括控件和标签等,当源更改时必须刷新。干杯:)
答案 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"); }
}
}