我有一個叫做ViewModel的類實現了INotifyPropertyChanged接口。在我的XAML我有3個文本框有符合我的ViewModel性質綁定屬性:如何在WPF中正確綁定我的模型?
TestsOrdered TestsCompleted TestsRemaining
我在我的代碼隱藏一個PropertyChanged事件處理程序。我有一個連接到XAML窗口的上下文「MyContext」。我不確定爲什麼在更改TestsOrdered和TestsCompleted值時UI不更新。我希望UI在我從文本框中跳出時進行更新,但直到我從TestsRemaining文本框中退出爲止。我設計中的缺陷在哪裏?
public partial class MainWindow : Window
{
public ViewModel vm;
public MainWindow()
{
InitializeComponent();
vm = new ViewModel();
//ct = new CompletionTime();
//ct.TestsOrdered = 8000;
vm.Name = "John Doe";
vm.TestsCompleted = 0;
vm.TestsOrdered = 0;
vm.TestsRemaining = 0;
this.MyContext.DataContext = vm;
}
private void btnName_Click(object sender, RoutedEventArgs e)
{
vm.Name = "Joe";
}
}
public class ViewModel : INotifyPropertyChanged
{
private string name;
private int mTestsOrdered;
private int mTestsRemaining;
private int mTestsCompleted;
public string Name
{
get { name; }
set
{
if (name != value)
{
name = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
}
}
public int TestsOrdered
{
get { return mTestsOrdered; }
set
{
if (mTestsOrdered != value)
{
mTestsOrdered = value;
PropertyChanged(this, new PropertyChangedEventArgs("TestsOrdered"));
}
}
}
public int TestsCompleted
{
get { return mTestsCompleted; }
set
{
if (mTestsCompleted != value)
{
mTestsCompleted = value;
PropertyChanged(this, new PropertyChangedEventArgs("TestsCompleted"));
}
}
}
public int TestsRemaining
{
get { return TestsOrdered - TestsCompleted; }
set
{
if (mTestsRemaining != value)
{
mTestsRemaining = value;
PropertyChanged(this, new PropertyChangedEventArgs("TestsRemaining"));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
MyContext是包含ViewModel對象的DataContext。
XAML:
<Grid Margin="-1,-9,1,9">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="244*"/>
<ColumnDefinition Width="251*"/>
</Grid.ColumnDefinitions>
<TextBox Width="100" HorizontalAlignment="Center" Margin="96.791,40,54,0" TextWrapping="Wrap" Text="{Binding Path=Name}" VerticalAlignment="Top" Grid.Column="1"/>
<Button x:Name="btnName" Content="Button" HorizontalAlignment="Left" Margin="171,210,0,0" VerticalAlignment="Top" Width="148" Height="47" Click="btnName_Click" Grid.ColumnSpan="2"/>
<TextBox Grid.Column="0" HorizontalAlignment="Left" Height="23" Margin="97,84,0,0" TextWrapping="Wrap" Text="{Binding Path=TestsOrdered}" VerticalAlignment="Top" Width="120"/>
<TextBox Grid.Column="0" HorizontalAlignment="Left" Height="23" Margin="97,112,0,0" TextWrapping="Wrap" Text="{Binding Path=TestsCompleted}" VerticalAlignment="Top" Width="120"/>
<TextBox Grid.Column="0" HorizontalAlignment="Left" Height="23" Margin="97,140,0,0" TextWrapping="Wrap" Text="{Binding Path=TestsRemaining}" VerticalAlignment="Top" Width="120"/>
</Grid>
您能否提供一個代碼示例,說明何時綁定xaml中的屬性? – Anders
另外,什麼是'MyContext'? – Anders
嗨Nautilous。我已經添加了一些XAML。我覺得我在XAML中分配綁定路徑,WPF負責幕後的其他部分。我錯過了什麼? –