【问题标题】:WPF MVVM CheckBoxesWPF MVVM 复选框
【发布时间】: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 上的视图模型中放置一个中断,它甚至没有中断。

标签: c# wpf checkbox mvvm


【解决方案1】:

如果您不想从视图中更改属性,只读属性就足够了。

public bool IsSelected { get; } = true;

【讨论】:

    【解决方案2】:
    <CheckBox x:Name="UpdateClosingCostAutoResult"  Grid.Column="1" enter code hereIsHitTestVisible="False" Focusable="False" IsChecked="{Binding IsSelected, Mode=OneTime}" /
    

    并在绑定中添加 OneTime 模式

    【讨论】:

    • 我添加了您的 cmets 和 Haukinger,但该复选框仍未显示为选中状态。就好像该方法甚至没有被调用。我中断了该方法,但它永远不会到达那里。
    • 你设置DataContext了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    相关资源
    最近更新 更多