【发布时间】:2013-12-27 00:41:00
【问题描述】:
我使用 MVVM Light 框架,但我无法获得对我绑定的属性的任何反应
我有一个对象 BuyoutRule
public class BuyoutRule : ViewModelBase
{
/*
More private fields and properties
*/
public int MaximumPrice
{
get { return _maximumPrice; }
set
{
_maximumPrice = value;
RaisePropertyChanged(() => MaximumPrice);
}
}
public bool Enabled
{
get { return _enabled; }
set
{
_enabled = value;
RaisePropertyChanged(() => Enabled);
}
}
这些对象在这个类的 ObservableCollection 中
public class BuyoutCheapModuleViewModel : ViewModelBase
{
private ObservableCollection<BuyoutRule> _buyoutRules;
public ObservableCollection<BuyoutRule> BuyoutRules
{
get { return _buyoutRules; }
set
{
_buyoutRules = value;
RaisePropertyChanged(() => BuyoutRules);
}
}
public BuyoutCheapModuleViewModel(IBuyoutRuleQuery buyoutRuleQuery)
{
BuyoutRules = new ObservableCollection<BuyoutRule>();
}
}
然后我的 View 具有上一个类作为 Datacontext
<Grid>
<ScrollViewer>
<StackPanel>
<DataGrid ItemsSource="{Binding BuyoutRules, Mode=TwoWay}"
SelectedItem="{Binding SelectedBuyoutRule, Mode=TwoWay}"
AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Last Name" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Player.LastName}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Rating" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Player.Rating}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Last Name" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Player.Position}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Mininum Buyout" IsReadOnly="False" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<xctk:IntegerUpDown Increment="1000"
Value="{Binding MinimumBuyoutPrice, Mode=TwoWay}"
Minimum="0"
FormatString="N0"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Maximum Buyout">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<xctk:IntegerUpDown Increment="1000"
Value="{Binding MaximumPrice, Mode=TwoWay}"
Minimum="0"
FormatString="N0"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Enabled">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Enabled, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<StackPanel Orientation="Horizontal">
<Button Content="Remove" Command="{Binding RemoveSelectedCommand}" />
</StackPanel>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding QuickbuyEnabled}">Enable quickbuy</CheckBox>
</StackPanel>
</StackPanel>
</ScrollViewer>
</Grid>
但是,如果我在设置器中的 MaximumPrice 或 Enabled 中设置断点并更改我的 UI 中的值,则没有任何反应,我无法触发设置器,触发它们的唯一时间是创建视图和初始加载的数据被填写
【问题讨论】:
-
在绑定上设置
UpdateSourceTrigger=PropertyChanged,看看是否有帮助 -
那行得通,虽然不能将您的评论标记为答案,只是以为我已经尝试过了,但之前一定错过了什么
标签: wpf xaml data-binding mvvm mvvm-light