title: How do I properly bind a .Text property to the Overridden .asString() method of a SimpleObjectProperty?
body: <p>I'm creating a simple control to browse for and sample Audio files. I want to use an <code>ObjectProperty&lt;File&gt;</code> so that I can bind some properties of the button responsible for playing the file:</p>
  
  <pre><code>PlayButton.disableProperty.bind(this.BGMFile.isNull());
  PlayButton.textProperty.bind(this.BGMFile.asString());
  </code></pre>
  
  <p>So then there will be three things that I will need to override, two of which I have successfully done, and so will not get into</p>
  
  <p>The third is the asString method:</p>
  
  <pre><code>new SimpleObjectProperty&lt;File&gt;(this, "BGM File", null){
      /*yadda yadda overrides*/
      @Override public StringBinding asString(){
          if (super.get() != null &amp;&amp; super.get().exists())
              return (StringBinding) Bindings.format(
                  super.get().getName(), this
              );
          else return (StringBinding) Bindings.format("[NONE]", this);
      }
  }
  </code></pre>
  
  <p>This feels correct to me, and I even ripped the code from grepCode <a href="http://grepcode.com/file/repo1.maven.org/maven2/net.java.openjfx.backport/openjfx-78-backport/1.8.0-ea-b96.1/javafx/beans/binding/ObjectExpression.java#ObjectExpression.asString%28%29" rel="nofollow">here</a>, but when I browse for a file using the FileChooser I have setup and select the file I want to use, and then set it to the SimpleProperty the button text stays as [NONE].</p>
  
  <p>This is the code for browsing for the file:</p>
  
  <pre><code>this.btnBrowseBGM.setOnAction((ActionEvent E) -&gt; {
      FileChooser FC = new FileChooser();
      FC.getExtensionFilters().add(Filters.AudioExtensions());
      FC.setTitle("Browse for Background Audio File");
      File F = FC.showOpenDialog(this.getScene().getWindow());
      if (F != null &amp;&amp; F.exists()) try {
          this.BGMFile.set(Files.copy(
              F.toPath(),
              Paths.get("Settings/Sound/", F.getName()),
              StandardCopyOption.REPLACE_EXISTING
          ).toFile());
      } catch(IOException ex) {
          Methods.Exception(
              "Unable to copy file to Settings Sound Directory.",
              "Failed to copy Sound File", ex);
          this.BGMFile.set(F);
      } else this.BGMFile.set(null);
      E.consume();
  });
  </code></pre>
  
  <p>Because the path doesn't exist it yells at me (which I expected) but it still should be setting the <code>BGMFile</code> property to <code>F</code>. I know it does because the toggle button becomes active and pressing it plays the sound file.</p>
  
  <p>So what am I missing/doing wrong here?</p>
  
  <h2>EDIT:</h2>
  
  <p>I think I may have an idea:
  One of the methods which I override is the set method:</p>
  
  <pre><code>@Override public void set(File newValue){
      if (newValue != null &amp;&amp; newValue.exists())
          super.set(newValue);
      else super.set(null);
  }
  </code></pre>
  
  <p>Could it be that overriding the set method causes it to not trigger the overridden <code>asString</code> method?</p>