c# - world - wpf mvvm complex example



Errore di lancio del setter privato solo sulla build di rilascio (1)

Questo è un bug noto che è stato corretto: https://connect.microsoft.com/VisualStudio/feedback/details/773682/wpf-property-with-private-setter-is-updated-by-a-twoway-binding

Quindi potresti ottenere questo comportamento se l'app è indirizzata a .NET Framework 4.0 ma .NET Framework 4.5+ è installato sul tuo computer di sviluppo.

È necessario rimuovere la parola chiave private dal setter per risolvere il problema.

Ho un'impostazione per la mappa che sto aggiornando tramite un pulsante di menu. Ho una strana situazione in cui ho riscontrato un errore nelle build di rilascio. Il codice è il seguente:

View-Model

private KnownTileSource _selectedTile;
public KnownTileSource SelectedTile
{
    get { return _selectedTile; }
    private set
    {
        _selectedTile = value;
        ...
        OnPropertyChanged("SelectedTile");
    }
}

vista

<Window ...
 xmlns:predefined="clr-namespace:BruTile.Predefined;assembly=BruTile">
...
    <MenuItem Header="_Bing Aerial" Command="{Binding ChangeTileCommand}" CommandParameter="{x:Static predefined:KnownTileSource.BingAerial}" IsChecked="{Binding Path=SelectedTile, Mode=TwoWay, Converter={local:EnumToBooleanConverter}, ConverterParameter=BingAerial}"/>
...
</Window>

Tutto ciò funzionava perfettamente nel mio ambiente di sviluppo, ma quando ho generato una versione di rilascio mi veniva da quanto segue:

Errore

System.InvalidOperationException: A TwoWay or OneWay ToSource binding cannot work on the read-only property 'SelectedTile'...

Soluzione semplice, cambia private set per set la proprietà SelectedTile sopra.

Quindi, come mai questo non ha generato l'errore durante il debug e solo durante il rilascio? Non riesco a vedere come funzioni mai durante la modalità di debug.





mvvm