【发布时间】:2016-08-29 21:38:26
【问题描述】:
我对 MVVM 编程风格很陌生。我遇到的问题是我试图在 WPF 窗口加载时设置复选框的属性。我不需要能够更改该属性。我只需要表明它是否被选中。
XAML: 更新:
<Grid RenderTransformOrigin="0.492,0.519" DataContext="{Binding ClosingCost}" VerticalAlignment="Center" HorizontalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="197"/>
<RowDefinition Height="103"/>
</Grid.RowDefinitions>
<StackPanel Grid.Column="0">
<Label x:Name="LineID" Content="LineID" Grid.Column="0"/>
<Label x:Name="LineName" Content="Line Name" Grid.Column="0"/>
<Label x:Name="ClosingCostType" Content="Closing Cost Type" Grid.Column="0"/>
<Label x:Name="UpdateClosingCostAuto" Content="Update Closing Cost Automatically" Grid.Column="0"/>
<Label x:Name="CopyEstToGFE" Content="Copy Estimate to GFE" Grid.Column="0"/>
<Label x:Name="CopyEsttoComparison" Content="Copy Estimate to Comparison" Grid.Column="0"/>
<Label x:Name="EstimateType" Content="Estimate Type" Grid.Column="0"/>
</StackPanel>
<StackPanel Grid.Column="1">
<Label x:Name="LineIDResult" Content="{Binding HUDLineNo}" Grid.Column="1"/>
<Label x:Name="LineNameResult" Content="{Binding LineName}"/>
<Label x:Name="ClosingCostTypeResult" Content="{Binding LineName}" Grid.Column="1"/>
<CheckBox x:Name="UpdateClosingCostAutoResult" Grid.Column="1" IsHitTestVisible="False" Focusable="False" IsChecked="{Binding IsSelected, Mode=OneTime}" />
<CheckBox x:Name="CopyEstToGFEResult" Content="{Binding CopyEstimateToGFE}" Grid.Column="1" IsEnabled="False"/>
<CheckBox x:Name="CopyEsttoComparisonResult" Content="{Binding CopyEstimateToComparison}" Grid.Column="1" IsEnabled="False"/>
<CheckBox x:Name="EstimateTypeResult" Content="{Binding EstimateType}" Grid.Column="1" IsEnabled="False"/>
</StackPanel>
<Label x:Name="Type" Grid.Row="1" RenderTransformOrigin="0.5,0.5" Content="{Binding HUDLineNo}"/>
</Grid>
视图模型:
更新:
public class EditClosingCostViewModel : ViewModelBase
{
public EditClosingCostViewModel() : this(new ClosingCostDal(), new ClosingCostFilterResult())
{
}
public EditClosingCostViewModel(ClosingCostDal closingCostDal, ClosingCostFilterResult closingCostFilterResult)
{
this.closingCostDal = closingCostDal;
this.closingCostFilterResult = closingCostFilterResult;
}
private ClosingCostDal closingCostDal;
private ClosingCostFilterResult closingCostFilterResult;
public ClosingCostFilterResult ClosingCost
{
get
{
return closingCostFilterResult;
}
set
{
closingCostFilterResult = value;
OnPropertyChanged("ClosingCost");
}
}
public bool IsSelected
{
get
{
if (ClosingCost.AutoUpdate == true)
{
return true;
}
else
{
return false;
}
}
}
}
不完全确定 ViewModel 是否正确,甚至不完全确定是否朝着正确的方向发展。
【问题讨论】:
-
请发布您的视图模型的完整代码
-
如果只需要绑定一次,请将绑定方式设置为OneTime
-
你需要在你的 IsSelectedProperty 上 Raise propertychanged。
-
不,他确实不需要需要
INotifyPropertyChanged除非他想从代码中更改属性(并相应地更新视图) -
在下面添加了两个 cmets。该方法似乎甚至没有被调用。在 IsSelected 上的视图模型中放置一个中断,它甚至没有中断。